diff --git a/.azurepipelines/artifacts-linux-test.yml b/.azurepipelines/artifacts-linux-test.yml deleted file mode 100644 index b550d1614a..0000000000 --- a/.azurepipelines/artifacts-linux-test.yml +++ /dev/null @@ -1,13 +0,0 @@ -jobs: -- ${{ each distro in parameters.distros }}: - - ${{ each dotnetVersion in parameters.dotnetVersions }}: - - job: - displayName: 'Artifacts Test ${{ distro }} ${{ dotnetVersion }} (${{ parameters.name }})' - pool: - vmImage: ${{ parameters.vmImage }} - steps: - - template: common-steps.yml - parameters: - includeArtifacts: true - - pwsh: ./build.ps1 -target Artifacts-Test -DockerDistro ${{ distro }} -DockerDotnetVersion ${{ dotnetVersion }} - displayName: '[Docker Test Artifacts ${{ distro }}_${{ dotnetVersion }}]' diff --git a/.azurepipelines/artifacts-windows-test.yml b/.azurepipelines/artifacts-windows-test.yml deleted file mode 100644 index 6c34d196f2..0000000000 --- a/.azurepipelines/artifacts-windows-test.yml +++ /dev/null @@ -1,31 +0,0 @@ -jobs: -- job: Artifacts_Test_MsBuild - displayName: Artifacts Test MsBuild (Windows) - pool: - vmImage: windows-latest - steps: - - template: common-steps.yml - parameters: - includeArtifacts: true - - pwsh: ./build.ps1 -target Artifacts-MsBuildFull-Test - displayName: '[MsBuild Test Artifacts]' -- job: Artifacts_Test_Commandline - displayName: Artifacts Test Commandline (Windows) - pool: - vmImage: windows-latest - steps: - - template: common-steps.yml - parameters: - includeArtifacts: true - - pwsh: ./build.ps1 -target Artifacts-Commandline-Test - displayName: '[Commandline Test Artifacts]' -- job: Artifacts_Test_Portable - displayName: Artifacts Test Portable (Windows) - pool: - vmImage: windows-latest - steps: - - template: common-steps.yml - parameters: - includeArtifacts: true - - pwsh: ./build.ps1 -target Artifacts-Portable-Test - displayName: '[Portable Test Artifacts]' \ No newline at end of file diff --git a/.azurepipelines/build.yml b/.azurepipelines/build.yml deleted file mode 100644 index 0e350faad6..0000000000 --- a/.azurepipelines/build.yml +++ /dev/null @@ -1,11 +0,0 @@ -steps: -- template: common-steps.yml -- pwsh: ./build.ps1 -target Pack - displayName: '[Cake build & pack]' -- publish: $(System.DefaultWorkingDirectory)/artifacts - displayName: 'Upload artifacts folder' - condition: and(succeeded(), eq( variables['Agent.OS'], 'Windows_NT' )) - artifact: storage -- publish: $(System.DefaultWorkingDirectory)/artifacts/native - displayName: 'Upload native folder' - artifact: storage-$(VM_IMAGE) diff --git a/.azurepipelines/common-steps.yml b/.azurepipelines/common-steps.yml deleted file mode 100644 index 7734b3f14e..0000000000 --- a/.azurepipelines/common-steps.yml +++ /dev/null @@ -1,23 +0,0 @@ -parameters: -- name: includeArtifacts - type: boolean - default: false - -steps: -- task: Cache@2 - inputs: - key: 'v1-tools | "$(Agent.OS)" | build.cake' - path: tools - displayName: Cache Cake tools -- task: Cache@2 - inputs: - key: 'v1-dotnet | "$(Agent.OS)" | build/build.config' - path: .dotnet - displayName: Cache dotnet locally -- ${{ if eq(parameters.includeArtifacts, true) }}: - - task: DownloadPipelineArtifact@2 - displayName: 'Download artifacts folder' - inputs: - source: current - path: $(Build.SourcesDirectory)/artifacts - artifact: storage diff --git a/.azurepipelines/docker.yml b/.azurepipelines/docker.yml deleted file mode 100644 index 2447ee3fdf..0000000000 --- a/.azurepipelines/docker.yml +++ /dev/null @@ -1,17 +0,0 @@ -jobs: -- ${{ each distro in parameters.distros }}: - - ${{ each dotnetVersion in parameters.dotnetVersions }}: - - job: - displayName: 'Docker ${{ distro }} ${{ dotnetVersion }} (${{ parameters.name }})' - pool: - vmImage: ${{ parameters.vmImage }} - steps: - - template: common-steps.yml - parameters: - includeArtifacts: true - - pwsh: ./build.ps1 -target Publish-DockerHub -DockerDistro ${{ distro }} -DockerDotnetVersion ${{ dotnetVersion }} - displayName: '[Docker build & Test ${{ distro }} ${{ dotnetVersion }}]' - env: - DOCKER_USERNAME: $(DOCKER_USERNAME) - DOCKER_PASSWORD: $(DOCKER_PASSWORD) - ENABLED_PUBLISH_DOCKER: $(ENABLED_PUBLISH_DOCKER) diff --git a/.azurepipelines/publish.yml b/.azurepipelines/publish.yml deleted file mode 100644 index e1ba2c7ae2..0000000000 --- a/.azurepipelines/publish.yml +++ /dev/null @@ -1,19 +0,0 @@ -parameters: -- name: taskName # defaults for any parameters that aren't specified - default: '' - -steps: -- template: common-steps.yml - parameters: - includeArtifacts: true -- pwsh: ./build.ps1 -target Publish-${{ parameters.taskName }} - displayName: '[Publish]' - env: - GITHUB_TOKEN: $(GITHUB_TOKEN) - NUGET_API_KEY: $(NUGET_API_KEY) - NUGET_API_URL: $(NUGET_API_URL) - CHOCOLATEY_API_KEY: $(CHOCOLATEY_API_KEY) - CHOCOLATEY_API_URL: $(CHOCOLATEY_API_URL) - ENABLED_PUBLISH_NUGET: $(ENABLED_PUBLISH_NUGET) - ENABLED_PUBLISH_CHOCOLATEY: $(ENABLED_PUBLISH_CHOCOLATEY) - DOTNET_ROLL_FORWARD_ON_NO_CANDIDATE_FX: 2 diff --git a/.azurepipelines/release.yml b/.azurepipelines/release.yml deleted file mode 100644 index 0ad9bd3c0f..0000000000 --- a/.azurepipelines/release.yml +++ /dev/null @@ -1,18 +0,0 @@ -parameters: - oses: ['windows', 'ubuntu', 'macos'] -steps: -- template: common-steps.yml - parameters: - includeArtifacts: true -- ${{ each os in parameters.oses }}: - - task: DownloadPipelineArtifact@2 - displayName: 'Download ${{os}} native folder' - inputs: - source: current - path: $(Build.SourcesDirectory)/artifacts/native - artifact: storage-${{os}}-latest -- pwsh: ./build.ps1 -target Release - displayName: '[Release]' - env: - GITHUB_TOKEN: $(GITHUB_TOKEN) - ENABLED_PUBLISH_RELEASE: $(ENABLED_PUBLISH_RELEASE) diff --git a/.azurepipelines/test.yml b/.azurepipelines/test.yml deleted file mode 100644 index 9ebbdffef1..0000000000 --- a/.azurepipelines/test.yml +++ /dev/null @@ -1,7 +0,0 @@ -steps: -- template: common-steps.yml -- pwsh: ./build.ps1 -target Test - displayName: '[Run Test]' - env: - ENABLED_UNIT_TESTS: $(ENABLED_UNIT_TESTS) - CODECOV_TOKEN: $(CODECOV_TOKEN) diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 0000000000..1327cd3a52 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "gitreleasemanager.tool": { + "version": "0.17.0", + "commands": [ + "dotnet-gitreleasemanager" + ] + }, + "wyam2": { + "version": "3.0.0", + "commands": [ + "wyam2" + ] + } + } +} \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index f6b9fc4559..d71522864b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,8 +1,4 @@ -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.202.5/containers/dotnet/.devcontainer/base.Dockerfile - -# [Choice] .NET version: 6.0, 5.0, 3.1, 6.0-bullseye, 5.0-bullseye, 3.1-bullseye, 6.0-focal, 5.0-focal, 3.1-focal -ARG VARIANT="6.0-bullseye-slim" -FROM mcr.microsoft.com/vscode/devcontainers/dotnet:0-${VARIANT} +FROM mcr.microsoft.com/devcontainers/dotnet:dev-8.0 # [Optional] Uncomment this section to install additional OS packages. # RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 31d2b11306..d2569415e2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,42 +1,55 @@ // For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: // https://github.com/microsoft/vscode-dev-containers/tree/v0.202.5/containers/dotnet { - "name": "C# (.NET)", - "runArgs": ["--init"], - "build": { - "dockerfile": "Dockerfile", - "args": { - "VARIANT": "6.0", - } - }, - - // Set *default* container specific settings.json values on container create. - "settings": { - "editor.fontFamily": "'Cascadia Code', Consolas, 'Courier New', monospace", - "editor.rulers": [90], - "cSpell.words": [ - "commiting", - "gittools", - "gitversion" - ], + "name": "GitVersion", + "build": { + "dockerfile": "Dockerfile", + "context": "." + }, + "features": { + "ghcr.io/devcontainers/features/common-utils:2": { + "installZsh": "true", + "username": "vscode", + "userUid": "1000", + "userGid": "1000", + "upgradePackages": "true" + }, + "ghcr.io/devcontainers/features/git:1": { + "version": "latest", + "ppa": "false" + }, + "ghcr.io/devcontainers/features/powershell:1": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/github-cli:1": { + "version": "latest" + }, + "ghcr.io/devcontainers/features/docker-in-docker:2": { + "version": "latest" + } + }, + "customizations": { + "vscode": { + "settings": { + "editor.fontFamily": "'Cascadia Code', Consolas, 'Courier New', monospace", + "editor.rulers": [ 90 ], + "cSpell.words": [ + "commiting", + "gittools", + "gitversion" + ] + }, + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "ms-dotnettools.csharp", + "EditorConfig.EditorConfig", + "streetsidesoftware.code-spell-checker" + ] + } }, - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "ms-dotnettools.csharp", - "EditorConfig.EditorConfig", - "streetsidesoftware.code-spell-checker" - ], - - "postCreateCommand": "dotnet restore src; dotnet build build", + "postCreateCommand": "dotnet restore src; dotnet build build", - // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "vscode", - "features": { - "docker-in-docker": "latest", - "git": "latest", - "github-cli": "latest", - "sshd": "latest", - "powershell": "latest" - } + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode" } diff --git a/.editorconfig b/.editorconfig index b1965ff726..cd66ed516f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -61,10 +61,11 @@ dotnet_style_prefer_is_null_check_over_reference_equality_method = true:warning dotnet_style_prefer_simplified_interpolation = true:suggestion # Dispose rules (CA2000 and CA2213) ported to IDE analyzers. We already execute the CA rules on the repo, so disable the IDE ones. +dotnet_diagnostic.IDE0005.severity = none dotnet_diagnostic.IDE0067.severity = none dotnet_diagnostic.IDE0068.severity = none dotnet_diagnostic.IDE0069.severity = none - +dotnet_diagnostic.CA1016.severity = none #### C# Coding Conventions #### # Prefer "var" everywhere @@ -187,3 +188,11 @@ dotnet_diagnostic.CA1816.severity = warning # IDE0005: Using directive is unnecessary. dotnet_diagnostic.IDE0005.severity = warning + +# RCS1037: Remove trailing white-space. +dotnet_diagnostic.RCS1037.severity = error + +# RCS1036: Remove redundant empty line. +dotnet_diagnostic.RCS1036.severity = error + +[resharper_]xml_space_before_self_closing = true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 19839b4122..0000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: "[Bug]" -labels: bug -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -## Expected Behavior - - -## Actual Behavior - - -## Possible Fix - - -## Steps to Reproduce - - -## Context - - -## Your Environment - - - -- Version Used: -- Operating System and version (Windows 10, Ubuntu 18.04): -- Link to your project: -- Link to your CI build (if appropriate): diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 6a58a1674f..a0369f2732 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,5 @@ blank_issues_enabled: false contact_links: - - name: Gitter Community Chat - url: https://gitter.im/GitTools/GitVersion - about: Please ask and answer questions here. \ No newline at end of file +- name: Ask for help or share ideas + url: https://github.com/GitTools/GitVersion/discussions/new/choose + about: Ask the community for help or share ideas for new features. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/documentation.md b/.github/ISSUE_TEMPLATE/documentation.md deleted file mode 100644 index 597757df8a..0000000000 --- a/.github/ISSUE_TEMPLATE/documentation.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -name: Documentation -about: Describe this issue template's purpose here. -title: "[Docs]" -labels: documentation -assignees: '' - ---- - - diff --git a/.github/ISSUE_TEMPLATE/failing-test.md b/.github/ISSUE_TEMPLATE/failing-test.md deleted file mode 100644 index 252723f267..0000000000 --- a/.github/ISSUE_TEMPLATE/failing-test.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Failing test -about: Describe this issue template's purpose here. -title: "[Failing test]" -labels: failing test case -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is or a link to it - -## Test code - -```csharp -using var fixture = new EmptyRepositoryFixture(); -fixture.Repository.MakeACommit(); -fixture.BranchTo("develop"); -fixture.Repository.MakeCommits(3); - -fixture.AssertFullSemver("0.1.0-alpha.1"); -``` diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 1714c54078..0000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: "[Feature]" -labels: feature -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always -frustrated when [...] - -## Detailed Description - - -## Context - - - -## Possible Implementation - diff --git a/.github/ISSUE_TEMPLATE/improvement-request.md b/.github/ISSUE_TEMPLATE/improvement-request.md deleted file mode 100644 index eb0b004e01..0000000000 --- a/.github/ISSUE_TEMPLATE/improvement-request.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Improvement request -about: Describe this issue template's purpose here. -title: "[Improvement]" -labels: improvement -assignees: '' - ---- - -**Is your improvement request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -## Detailed Description - - -## Context - - - -## Possible Implementation - diff --git a/.github/ISSUE_TEMPLATE/issue-report.yml b/.github/ISSUE_TEMPLATE/issue-report.yml new file mode 100644 index 0000000000..373596a764 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue-report.yml @@ -0,0 +1,72 @@ +name: 🐞 Bug/Issue report +description: Create a report to help us improve +title: "[ISSUE]: Codestin Search App - GitTools and Contributors - GitTools and Contributors - MIT - Copyright GitTools 2021. - https://github.com/GitTools/GitVersion - - package_icon.png - false - Derives SemVer information from a repository following GitFlow or GitHubFlow. - Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer - true - https://github.com/GitTools/GitVersion/releases - README.md - - diff --git a/build/nuspec/GitVersion.Portable.nuspec b/build/nuspec/GitVersion.Portable.nuspec deleted file mode 100644 index 2afbeaa19f..0000000000 --- a/build/nuspec/GitVersion.Portable.nuspec +++ /dev/null @@ -1,18 +0,0 @@ - - - - GitVersion.Portable - $version$ - Codestin Search App - GitTools and Contributors - GitTools and Contributors - Copyright GitTools 2021. - http://www.opensource.org/licenses/mit-license.php - https://github.com/GitTools/GitVersion - https://raw.githubusercontent.com/GitTools/graphics/master/GitVersion/Color/icon_100x100.png - false - Derives SemVer information from a repository following GitFlow or GitHubFlow. - Git Versioning GitVersion GitFlowVersion GitFlow GitHubFlow SemVer - https://github.com/GitTools/GitVersion/releases - - diff --git a/build/nuspec/README.md b/build/nuspec/README.md index 108f089325..92ee4c6227 100644 --- a/build/nuspec/README.md +++ b/build/nuspec/README.md @@ -5,11 +5,10 @@ works out the [Semantic Version][semver] of the commit being built. [![Gitter][gitter-badge]][gitter] -| Artifact | Stable | | -| :------------------------- | :----------------------------------------------------------------- | - | -| **GitVersion.Tool** | [![NuGet][gvgt-badge]][gvgt] | -| **GitVersion.CommandLine** | [![NuGet][gvcl-badge]][gvcl] | -| **GitVersion.MsBuild** | [![NuGet][gvt-badge]][gvt] | Known as [GitVersionTask][gitversiontask] before v5.6.0 | +| Artifact | Stable | | +|:-----------------------|:-----------------------------|---------------------------------------------------------| +| **GitVersion.Tool** | [![NuGet][gvgt-badge]][gvgt] | +| **GitVersion.MsBuild** | [![NuGet][gvt-badge]][gvt] | Known as [GitVersionTask][gitversiontask] before v5.6.0 | ## Compatibility diff --git a/build/nuspec/VERIFICATION.txt b/build/nuspec/VERIFICATION.txt index bd0489649b..ac647c6a62 100644 --- a/build/nuspec/VERIFICATION.txt +++ b/build/nuspec/VERIFICATION.txt @@ -4,4 +4,4 @@ in verifying that this package's contents are trustworthy. This package is published by the GitTools organization itself. The binaries are identical to other package types published by the project, in particular -the GitVersion.Portable nuget package. +the GitVersion.Portable and GitVersion nuget package. diff --git a/build/publish/BuildContext.cs b/build/publish/BuildContext.cs index 5ad09ee4fa..e2ef7d662e 100644 --- a/build/publish/BuildContext.cs +++ b/build/publish/BuildContext.cs @@ -3,12 +3,9 @@ namespace Publish; -public class BuildContext : BuildContextBase +public class BuildContext(ICakeContext context) : BuildContextBase(context) { public Credentials? Credentials { get; set; } - public List Packages { get; set; } = new(); - public BuildContext(ICakeContext context) : base(context) - { - } + public List Packages { get; } = []; } diff --git a/build/publish/BuildLifetime.cs b/build/publish/BuildLifetime.cs index 7746522c9a..f7672f8c82 100644 --- a/build/publish/BuildLifetime.cs +++ b/build/publish/BuildLifetime.cs @@ -1,3 +1,4 @@ +using Common.Lifetime; using Common.Utilities; using Publish.Utilities; @@ -5,9 +6,10 @@ namespace Publish; public class BuildLifetime : BuildLifetimeBase { - public override void Setup(BuildContext context) + public override void Setup(BuildContext context, ISetupContext info) { - base.Setup(context); + base.Setup(context, info); + context.Credentials = Credentials.GetCredentials(context); if (context.Version?.NugetVersion != null) @@ -18,7 +20,9 @@ public override void Setup(BuildContext context) foreach (var packageFile in nugetPackagesFiles) { var packageName = packageFile.GetFilenameWithoutExtension().ToString()[..^(nugetVersion.Length + 1)].ToLower(); - context.Packages.Add(new NugetPackage(packageName, packageFile, packageName.Contains("Portable", StringComparison.OrdinalIgnoreCase))); + var isChocoPackage = packageName.Equals("GitVersion.Portable", StringComparison.OrdinalIgnoreCase) || + packageName.Equals("GitVersion", StringComparison.OrdinalIgnoreCase); + context.Packages.Add(new NugetPackage(packageName, packageFile, isChocoPackage)); } } context.StartGroup("Build Setup"); diff --git a/build/publish/Program.cs b/build/publish/Program.cs index 855c9a6af0..d3b1a60ff1 100644 --- a/build/publish/Program.cs +++ b/build/publish/Program.cs @@ -7,5 +7,4 @@ .UseLifetime() .UseTaskLifetime() .UseRootDirectory() - .InstallToolsFromRootManifest() .Run(args); diff --git a/build/publish/Tasks/Default.cs b/build/publish/Tasks/Default.cs index eed5903ce5..88260f7a6d 100644 --- a/build/publish/Tasks/Default.cs +++ b/build/publish/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Publish.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/publish/Tasks/PublishChocolatey.cs b/build/publish/Tasks/PublishChocolatey.cs index 373fd457ac..fce099205d 100644 --- a/build/publish/Tasks/PublishChocolatey.cs +++ b/build/publish/Tasks/PublishChocolatey.cs @@ -7,25 +7,23 @@ namespace Publish.Tasks; [TaskName(nameof(PublishChocolatey))] [TaskDescription("Publish chocolatey packages")] [IsDependentOn(typeof(PublishChocolateyInternal))] -public class PublishChocolatey : FrostingTask -{ -} +public class PublishChocolatey : FrostingTask; [TaskName(nameof(PublishChocolateyInternal))] [TaskDescription("Publish chocolatey packages")] -public class PublishChocolateyInternal : FrostingTask +public class PublishChocolateyInternal : AsyncFrostingTask { public override bool ShouldRun(BuildContext context) { var shouldRun = true; shouldRun &= context.ShouldRun(context.IsGitHubActionsBuild, $"{nameof(PublishChocolatey)} works only on GitHub Actions."); shouldRun &= context.ShouldRun(context.IsOnWindows, $"{nameof(PublishChocolatey)} works only on windows."); - shouldRun &= context.ShouldRun(context.IsStableRelease, $"{nameof(PublishChocolatey)} works only for stable releases."); + shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsTaggedPreRelease, $"{nameof(PublishChocolatey)} works only for tagged releases."); return shouldRun; } - public override void Run(BuildContext context) + public override async Task RunAsync(BuildContext context) { var apiKey = context.Credentials?.Chocolatey?.ApiKey; if (string.IsNullOrEmpty(apiKey)) @@ -34,26 +32,30 @@ public override void Run(BuildContext context) } var nugetVersion = context.Version!.NugetVersion; - foreach (var (packageName, filePath, _) in context.Packages.Where(x => x.IsChocoPackage)) + var packages = context.Packages + .Where(x => x.IsChocoPackage) + .OrderByDescending(x => x.PackageName); + foreach (var (packageName, filePath, _) in packages) { - if (!IsPackagePublished(context, packageName, nugetVersion)) + if (IsPackagePublished(context, packageName, nugetVersion)) continue; + try { - try - { - context.Information($"Package {packageName}, version {nugetVersion} is being published."); - context.ChocolateyPush(filePath.FullPath, new ChocolateyPushSettings - { - ApiKey = apiKey, - Source = Constants.ChocolateyUrl, - Force = true - }); - } - catch (Exception) + context.Information($"Package {packageName}, version {nugetVersion} is being published."); + context.ChocolateyPush(filePath.FullPath, new ChocolateyPushSettings { - context.Warning($"There is an exception publishing the Package {packageName}."); - // chocolatey sometimes fails with an error, even if the package gets pushed - } + ApiKey = apiKey, + Source = Constants.ChocolateyUrl, + Force = true + }); } + catch (Exception) + { + context.Warning($"There is an exception publishing the Package {packageName}."); + // chocolatey sometimes fails with an error, even if the package gets pushed + } + + // wait 5 seconds to avoid the meta-package to be published before the other packages + await Task.Delay(TimeSpan.FromSeconds(5)); } } diff --git a/build/publish/Tasks/PublishNuget.cs b/build/publish/Tasks/PublishNuget.cs index 25e40afb62..2abb602526 100644 --- a/build/publish/Tasks/PublishNuget.cs +++ b/build/publish/Tasks/PublishNuget.cs @@ -6,9 +6,7 @@ namespace Publish.Tasks; [TaskName(nameof(PublishNuget))] [TaskDescription("Publish nuget packages")] [IsDependentOn(typeof(PublishNugetInternal))] -public class PublishNuget : FrostingTask -{ -} +public class PublishNuget : FrostingTask; [TaskName(nameof(PublishNugetInternal))] [TaskDescription("Publish nuget packages")] @@ -18,7 +16,7 @@ public override bool ShouldRun(BuildContext context) { var shouldRun = true; shouldRun &= context.ShouldRun(context.IsGitHubActionsBuild, $"{nameof(PublishNuget)} works only on GitHub Actions."); - shouldRun &= context.ShouldRun(context.IsPreRelease || context.IsStableRelease, $"{nameof(PublishNuget)} works only for releases."); + shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsTaggedPreRelease || context.IsInternalPreRelease, $"{nameof(PublishNuget)} works only for releases."); return shouldRun; } @@ -26,25 +24,28 @@ public override bool ShouldRun(BuildContext context) public override void Run(BuildContext context) { // publish to github packages for commits on main and on original repo - if (context.IsGitHubActionsBuild && context.IsOnMainOrSupportBranchOriginalRepo) + if (context.IsInternalPreRelease) { + context.StartGroup("Publishing to GitHub Packages"); var apiKey = context.Credentials?.GitHub?.Token; if (string.IsNullOrEmpty(apiKey)) { throw new InvalidOperationException("Could not resolve NuGet GitHub Packages API key."); } PublishToNugetRepo(context, apiKey, Constants.GithubPackagesUrl); + context.EndGroup(); } - // publish to nuget.org for stable releases - if (context.IsStableRelease) + // publish to nuget.org for tagged releases + if (context.IsStableRelease || context.IsTaggedPreRelease) { + context.StartGroup("Publishing to Nuget.org"); var apiKey = context.Credentials?.Nuget?.ApiKey; if (string.IsNullOrEmpty(apiKey)) { throw new InvalidOperationException("Could not resolve NuGet org API key."); } - PublishToNugetRepo(context, apiKey, Constants.NugetOrgUrl); + context.EndGroup(); } } private static void PublishToNugetRepo(BuildContext context, string apiKey, string apiUrl) diff --git a/build/publish/Utilities/Credentials.cs b/build/publish/Utilities/Credentials.cs index e8cf943c20..aa2ef63082 100644 --- a/build/publish/Utilities/Credentials.cs +++ b/build/publish/Utilities/Credentials.cs @@ -4,14 +4,14 @@ namespace Publish.Utilities; public class Credentials { - public GitHubCredentials? GitHub { get; private set; } - public NugetCredentials? Nuget { get; private set; } - public ChocolateyCredentials? Chocolatey { get; private set; } + public GitHubCredentials? GitHub { get; private init; } + public NugetCredentials? Nuget { get; private init; } + public ChocolateyCredentials? Chocolatey { get; private init; } public static Credentials GetCredentials(ICakeContext context) => new() { - GitHub = new GitHubCredentials(context.EnvironmentVariable("GITHUB_TOKEN")), - Nuget = new NugetCredentials(context.EnvironmentVariable("NUGET_API_KEY")), - Chocolatey = new ChocolateyCredentials(context.EnvironmentVariable("CHOCOLATEY_API_KEY")), + GitHub = new(context.EnvironmentVariable("GITHUB_TOKEN")), + Nuget = new(context.EnvironmentVariable("NUGET_API_KEY")), + Chocolatey = new(context.EnvironmentVariable("CHOCOLATEY_API_KEY")), }; } diff --git a/build/release/BuildContext.cs b/build/release/BuildContext.cs index 7b01b01652..d29e09cd0a 100644 --- a/build/release/BuildContext.cs +++ b/build/release/BuildContext.cs @@ -3,11 +3,7 @@ namespace Release; -public class BuildContext : BuildContextBase +public class BuildContext(ICakeContext context) : BuildContextBase(context) { public Credentials? Credentials { get; set; } - - public BuildContext(ICakeContext context) : base(context) - { - } } diff --git a/build/release/BuildLifetime.cs b/build/release/BuildLifetime.cs index 26244e2b05..5bf3901bdf 100644 --- a/build/release/BuildLifetime.cs +++ b/build/release/BuildLifetime.cs @@ -1,3 +1,4 @@ +using Common.Lifetime; using Common.Utilities; using Release.Utilities; @@ -5,9 +6,10 @@ namespace Release; public class BuildLifetime : BuildLifetimeBase { - public override void Setup(BuildContext context) + public override void Setup(BuildContext context, ISetupContext info) { - base.Setup(context); + base.Setup(context, info); + context.Credentials = Credentials.GetCredentials(context); context.StartGroup("Build Setup"); diff --git a/build/release/Tasks/Default.cs b/build/release/Tasks/Default.cs index e842138737..595447a5db 100644 --- a/build/release/Tasks/Default.cs +++ b/build/release/Tasks/Default.cs @@ -1,6 +1,4 @@ namespace Release.Tasks; [TaskDescription("Shows this output")] -public class Default : Common.Tasks.Default -{ -} +public class Default : Common.Tasks.Default; diff --git a/build/release/Tasks/PublishRelease.cs b/build/release/Tasks/PublishRelease.cs index cb1881fe4b..7bbaf8ea9c 100644 --- a/build/release/Tasks/PublishRelease.cs +++ b/build/release/Tasks/PublishRelease.cs @@ -8,9 +8,7 @@ namespace Release.Tasks; [TaskDescription("Publish release")] [IsDependentOn(typeof(PublishReleaseInternal))] -public class PublishRelease : FrostingTask -{ -} +public class PublishRelease : FrostingTask; [TaskName(nameof(PublishReleaseInternal))] [TaskDescription("Publish release")] @@ -20,7 +18,7 @@ public override bool ShouldRun(BuildContext context) { var shouldRun = true; shouldRun &= context.ShouldRun(context.IsGitHubActionsBuild, $"{nameof(PublishRelease)} works only on GitHub Actions."); - shouldRun &= context.ShouldRun(context.IsStableRelease, $"{nameof(PublishRelease)} works only for releases."); + shouldRun &= context.ShouldRun(context.IsStableRelease || context.IsTaggedPreRelease, $"{nameof(PublishRelease)} works only for tagged releases."); return shouldRun; } @@ -47,7 +45,7 @@ public override void Run(BuildContext context) Milestone = milestone, Name = milestone, Prerelease = false, - TargetCommitish = "main" + TargetCommitish = Constants.DefaultBranch }); context.GitReleaseManagerAddAssets(token, Constants.RepoOwner, Constants.Repository, milestone, assets); diff --git a/build/release/Utilities/Credentials.cs b/build/release/Utilities/Credentials.cs index c71f6cf92f..ab698c4f95 100644 --- a/build/release/Utilities/Credentials.cs +++ b/build/release/Utilities/Credentials.cs @@ -4,9 +4,9 @@ namespace Release.Utilities; public class Credentials { - public GitHubCredentials? GitHub { get; private set; } + public GitHubCredentials? GitHub { get; private init; } public static Credentials GetCredentials(ICakeContext context) => new() { - GitHub = new GitHubCredentials(context.EnvironmentVariable("GITHUB_TOKEN")), + GitHub = new(context.EnvironmentVariable("GITHUB_TOKEN")), }; } diff --git a/docs/input/_Bottom.cshtml b/docs/input/_Bottom.cshtml index 16443c0a8a..a83a4b7d76 100644 --- a/docs/input/_Bottom.cshtml +++ b/docs/input/_Bottom.cshtml @@ -1,9 +1,10 @@ - - + *@ diff --git a/docs/input/docs/learn/branching-strategies/gitflow/index.md b/docs/input/docs/learn/branching-strategies/gitflow/index.md index 8e0e71dcf5..4a0895e419 100644 --- a/docs/input/docs/learn/branching-strategies/gitflow/index.md +++ b/docs/input/docs/learn/branching-strategies/gitflow/index.md @@ -17,7 +17,7 @@ SemVer compatible versions from this structure. prefixed with release-. Eg: release-4.1 (or release-4.1.0) * Hotfixes are prefixed with hotfix- Eg. hotfix-4.0.4 * The original [GitFlow model](https://nvie.com/posts/a-successful-git-branching-model/) - specifies branches with a "-" separator while the [git flow extensions](https://github.com/nvie/gitflow) + specifies branches with a "-" separator while the [git flow extensions](https://github.com/CJ-Systems/gitflow-cjs) default to a "/" separator. Either work with GitVersion. * Tags are used on the main branch and reflects the SemVer of each stable release eg 3.3.8 , 4.0.0, etc diff --git a/docs/input/docs/learn/branching-strategies/githubflow/index.md b/docs/input/docs/learn/branching-strategies/githubflow/index.md index b7e8d0593d..d683b2d906 100644 --- a/docs/input/docs/learn/branching-strategies/githubflow/index.md +++ b/docs/input/docs/learn/branching-strategies/githubflow/index.md @@ -24,6 +24,6 @@ GitHub Flow allows and encourages [continuous delivery](/docs/reference/modes/co ## Resources * [GitHubFlow guide by GitHub](https://docs.github.com/en/get-started/quickstart/github-flow#introduction) -* [GitHubFlow original blog post](https://scottchacon.com/2011/08/31/github-flow.html) +* [GitHubFlow original blog post](https://scottchacon.com/2011/08/31/github-flow) * [Phil Haack's (haacked) GitHubFlow aliases](https://haacked.com/archive/2014/07/28/github-flow-aliases/) * [GitHubFlow vs GitFlow](https://lucamezzalira.com/2014/03/10/git-flow-vs-github-flow/) diff --git a/docs/input/docs/learn/how-it-works.md b/docs/input/docs/learn/how-it-works.md index a33f2695b3..6c3ee2ae1a 100644 --- a/docs/input/docs/learn/how-it-works.md +++ b/docs/input/docs/learn/how-it-works.md @@ -5,7 +5,7 @@ RedirectFrom: docs/more-info/how-it-works --- GitVersion v3 works very differently to v2. Version 2 had knowledge of both -GitFlow and GitHubFlow hard coded into it, with each branch having it's own +GitFlow and GitHubFlow hard coded into it, with each branch having its own class which calculated the version for that branch type. v3 is driven by [configuration](/docs/reference/configuration), meaning most of the @@ -47,7 +47,9 @@ Currently we have the following strategies: GitVersion.yaml file * `MergeMessageBaseVersionStrategy` - Finds version numbers from merge messages (e.g., `Merge 'release/3.0.0' into 'main'` will return `3.0.0`) -* `FallbackBaseVersionStrategy` - Always returns 0.1.0 for new repositories +* `FallbackBaseVersionStrategy` - Always returns 0.0.0 and will be used for + calculating the next version which is dependent on the increment strategy of + the effected branch (e.g. on main the next version is 0.0.1 or on develop it is 0.1.0) Each strategy needs to return an instance of `BaseVersion` which has the following properties: diff --git a/docs/input/docs/reference/build-servers/azure-devops.md b/docs/input/docs/reference/build-servers/azure-devops.md index 15fba0b50b..8439d978d6 100644 --- a/docs/input/docs/reference/build-servers/azure-devops.md +++ b/docs/input/docs/reference/build-servers/azure-devops.md @@ -2,172 +2,19 @@ Order: 20 Title: Azure DevOps Description: | - Details on the Azure DevOps or Team Foundation Server Build Pipeline support - in GitVersion + Details on the Azure DevOps Build Pipeline support in GitVersion RedirectFrom: docs/build-server-support/build-server/azure-devops --- +## Installation and usage -## Basic Usage - -In Azure DevOps Pipeline (the web based build system) you can call GitVersion -either using the Command Line build step or install an extension / custom build -step. The custom build step requires a one-time setup to import the GitVersion -task into your TFS or Azure DevOps Pipeline instance. - -## Executing GitVersion - -### Using GitVersion with the MSBuild Task NuGet Package - -1. Add the [GitVersionTask](https://www.nuget.org/packages/GitVersionTask/) - NuGet package to your projects. - -See [MSBuild Task](/docs/usage/msbuild) for further instructions how to use -the MS Build Task. - -### Using GitVersion with the Command Line build step - -1. Make sure to have GitVersion.exe under version control. There exists also a - [Chocolatey package](https://chocolatey.org/packages/GitVersion.Portable) for - installing GitVersion.exe on build agents. -2. Add a Command Line build step to your build definition. You'll probably want - to drag the task to be at or near the top to ensure it executes before your - other build steps. -3. Set the Tool parameter to `\GitVersion.exe`. -4. Set the Arguments parameter to `/output buildserver /nofetch`. -5. If you want the GitVersionTask to update AssemblyInfo files add - `updateAssemblyInfo true` to the Arguments parameter. -6. If you want to update the build number you need to send a - [logging command](https://github.com/microsoft/azure-pipelines-tasks/blob/main/docs/authoring/commands.md) - to TFS. - -### Using the custom GitVersion build step - -#### Installing - -##### Installing the extension - -For Visual Studio Team Service or TFS 2015 Update 2 or higher it is recommended -to install the GitVersion extension: - -1. Install the - [GitVersion Extension](https://marketplace.visualstudio.com/items?itemName=gittools.usegitversion). - -##### Manually installing/updating the custom build step - -If you run TFS 2015 RTM or Update 1 or don't want to install the GitVersion -extension you can install the build task manually: - -1. Install the `tfx` command line tool as shown [here](https://github.com/microsoft/tfs-cli/blob/master/README.md#setup). -2. For TFS 2015 On-Prem configure Basic Authentication in TFS as shown [here](https://github.com/microsoft/tfs-cli/blob/master/docs/configureBasicAuth.md). -3. Download the GitVersion TFS build task from the latest release on the - [GitVersion releases page](https://github.com/GitTools/GitVersion/releases) and - unzip. -4. Run `tfx login` as shown [here](https://github.com/microsoft/tfs-cli/blob/master/README.md#login). -5. From the directory outside of where you unzipped the task, run - `tfx build tasks upload --task-path .\GitVersionVsixTask --overwrite` where - GitVersionVsixTask is the directory containing the files. -6. It should successfully install. - -#### Using the GitVersion custom build step - -From a TFS build definition, select "Add a Step" and then in the Build category, -choose GitVersion and click Add. You'll probably want to drag the task to be at -or near the top to ensure it executes before your other build steps. - -If you want the GitVersionTask to update AssemblyInfo files, check the box in -the task configuration. For advanced usage, you can pass additional options to -the GitVersion exe in the Additional arguments section. - -The Azure DevOps Pipeline build step can update your build number with -GitVersion variables. See below for details. - -#### Using Pipelines yaml - -Add the following yaml task and variable to your `azure-pipelines.yml` file: - -```yml -variables: - GitVersion.SemVer: '' - -steps: -- task: UseGitVersion@5 - displayName: gitversion - inputs: - versionSpec: '5.x' - updateAssemblyInfo: true -``` - -You can now use the `GitVersion.SemVer` environment variable in any subsequent -tasks to refer to the semantic version number for your build. For example, you -can build your dotnet core application with a semantic version number like so: - -```yml -- task: DotNetCoreCLI@2 - displayName: Build - inputs: - command: build - projects: '$(solution)' - configuration: '$(buildConfiguration)' - versioningScheme: byEnvVar - versionEnvVar: 'GitVersion.SemVer' - -``` - -## Running inside TFS - -### Using the GitVersion Variables - -GitVersion passes variables in the form of `GitVersion.*` (Eg: -`GitVersion.Major`) to TFS Build and also writes `GITVERSION.*` -(Eg: `GITVERSION.MAJOR`) environment variables that are available for any -subsequent build step. - -To use these variables you can just refer to them using the standard variable -syntax. For instance `$(GitVersion.NuGetVersion)` in your nuget pack task to set -the version number. Since update 1 there are no known limitations. - -See [Variables](/docs/reference/variables) for an overview of available variables. - -#### Using GitVersion variables in build name - -To use GitVersion's variables in the build name, just add them in the form -`$(GITVERSION_FullSemVer)` into the Build definition's build number string. Then -just ensure GitVersion is called with `/output buildserver` and it will replace -those variables with the calculated version. The TFS GitVersion Build Step -(above) handles this too, so if you're already using that, there's nothing extra -to configure. - -If GitVersion does not find any substitutions it will just default to using `FullSemVer` +For Azure DevOps Services or Azure DevOps Server you can install the [GitTools Bundle](https://marketplace.visualstudio.com/items?itemName=gittools.gittools). :::{.alert .alert-danger} **Important** -If you currently use `$(rev:.r)` in your build number, that won't -work correctly if you -use GitVersion variables as well due to the delayed expansion of the GitVersion -vars. Instead, you might be able to use `$(GitVersion_BuildMetaData)` to achieve -a similar result. See [Variables](/docs/reference/variables) for more info on the -variables. +You must disable shallow fetch, either in the pipeline settings UI or by setting `fetchDepth: 0` in your `checkout` step; +without it, Azure DevOps Pipelines will perform a shallow clone, which will cause GitVersion to display an error message. +See [the Azure DevOps documentation](https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/steps-checkout?view=azure-pipelines#shallow-fetch) for more information. ::: -#### Known limitations - -* If you are using on premises TFS, make sure you are using at least - **TFS 2015 Update 1**, otherwise a few things will not work. -* Installing the extension on an on premise TFS requires at least TFS 2015 - Update 2. -* You need to make sure that all tags are fetched for the Git repository, - otherwise you may end with wrong versions (e.g. `FullSemVer` like `1.2.0+5` - instead of `1.2.0` for tagged releases) Just checking the `Clean Repository` - check box in the build definition settings might not be enough since this will - run a `git clean -fdx/reset --hard` without fetching all tags later. You can - force deletion of the whole folder and a re-clone containing all tags by - settings the variable `Build.Clean` to `all`. This will take more time during - build but makes sure that all tags are fetched. In the future it is planned to - allow using `git.exe` instead of current `libgit2sharp` for syncing the repos - which might allow other possibilities to solve this issue. For details see this - [GitHub issue](https://github.com/microsoft/azure-pipelines-tasks/issues/1218). -* If running a build for a certain commit (through passing the commit SHA while - queueing the build) all tags from the repository will be fetched, even the ones - newer than the commit. This can lead to different version numbers while - re-running historical builds. +More information can be found at [gittools/actions](https://github.com/GitTools/actions/blob/main/docs/examples/azure/gitversion/index.md). \ No newline at end of file diff --git a/docs/input/docs/reference/build-servers/bitbucket-pipelines.md b/docs/input/docs/reference/build-servers/bitbucket-pipelines.md index 610031ecbe..b809cee247 100644 --- a/docs/input/docs/reference/build-servers/bitbucket-pipelines.md +++ b/docs/input/docs/reference/build-servers/bitbucket-pipelines.md @@ -1,5 +1,5 @@ --- -Order: 35 +Order: 40 Title: BitBucket Pipelines Description: Details on the Atlassian BitBucket Pipelines support in GitVersion --- @@ -28,7 +28,7 @@ pipelines: script: - export PATH="$PATH:/root/.dotnet/tools" - dotnet tool install --global GitVersion.Tool --version 5.* - - dotnet-gitversion /buildserver + - dotnet-gitversion /output buildserver - source gitversion.properties - echo Building with semver $GITVERSION_FULLSEMVER - dotnet build @@ -38,10 +38,10 @@ pipelines: **Important** You must set the `clone:depth` setting as shown above; without it, BitBucket Pipelines will perform a shallow clone, which will -cause GitVersion will display an error message. +cause GitVersion to display an error message. ::: -When the action `dotnet-gitversion /buildserver` is executed, it will detect that it is running in BitBucket Pipelines by the presence of +When the action `dotnet-gitversion /output buildserver` is executed, it will detect that it is running in BitBucket Pipelines by the presence of the `BITBUCKET_WORKSPACE` environment variable, which is set by the BitBucket Pipelines engine. It will generate a text file named `gitversion.properties` which contains all the output of the GitVersion tool, exported as individual environment variables prefixed with `GITVERSION_`. These environment variables can then be imported back into the build step using the `source gitversion.properties` action. @@ -62,7 +62,7 @@ pipelines: script: - export PATH="$PATH:/root/.dotnet/tools" - dotnet tool install --global GitVersion.Tool --version 5.* - - dotnet-gitversion /buildserver + - dotnet-gitversion /output buildserver artifacts: - gitversion.properties - step: diff --git a/docs/input/docs/reference/build-servers/buildkite.md b/docs/input/docs/reference/build-servers/buildkite.md index 5531690ef1..d06e9d4aad 100644 --- a/docs/input/docs/reference/build-servers/buildkite.md +++ b/docs/input/docs/reference/build-servers/buildkite.md @@ -1,5 +1,5 @@ --- -Order: 40 +Order: 50 Title: Buildkite Description: Details on the Buildkite support in GitVersion RedirectFrom: docs/build-server-support/build-server/buildkite diff --git a/docs/input/docs/reference/build-servers/continua.md b/docs/input/docs/reference/build-servers/continua.md index 3605084d18..18f035eb04 100644 --- a/docs/input/docs/reference/build-servers/continua.md +++ b/docs/input/docs/reference/build-servers/continua.md @@ -1,5 +1,5 @@ --- -Order: 50 +Order: 60 Title: Continua CI Description: Details on the Continua CI support in GitVersion RedirectFrom: docs/build-server-support/build-server/continua diff --git a/docs/input/docs/reference/build-servers/github-actions.md b/docs/input/docs/reference/build-servers/github-actions.md new file mode 100644 index 0000000000..0e92cff8e6 --- /dev/null +++ b/docs/input/docs/reference/build-servers/github-actions.md @@ -0,0 +1,18 @@ +--- +Order: 70 +Title: GitHub Actions +Description: | + Details on the GitHub Actions Workflow support in GitVersion +--- +## Installation and usage + +For GitHub Actions you can install the action from [GitTools Bundle](https://github.com/marketplace/actions/gittools). + +:::{.alert .alert-danger} +**Important** + +You must disable shallow fetch by setting `fetch-depth: 0` in your `checkout` step; +without it, GitHub Actions might perform a shallow clone, which will cause GitVersion to display an error message. +::: + +More information can be found at [gittools/actions](https://github.com/GitTools/actions/blob/main/docs/examples/github/gitversion/index.md). \ No newline at end of file diff --git a/docs/input/docs/reference/build-servers/gitlab.md b/docs/input/docs/reference/build-servers/gitlab.md index b9495856e7..a3f9acde28 100755 --- a/docs/input/docs/reference/build-servers/gitlab.md +++ b/docs/input/docs/reference/build-servers/gitlab.md @@ -1,5 +1,5 @@ --- -Order: 60 +Order: 80 Title: GitLab CI Description: Details on the GitLab CI support in GitVersion RedirectFrom: docs/build-server-support/build-server/gitlab diff --git a/docs/input/docs/reference/build-servers/jenkins.md b/docs/input/docs/reference/build-servers/jenkins.md index 46b6355a29..70f376e8f1 100644 --- a/docs/input/docs/reference/build-servers/jenkins.md +++ b/docs/input/docs/reference/build-servers/jenkins.md @@ -1,5 +1,5 @@ --- -Order: 70 +Order: 90 Title: Jenkins Description: Details on the Jenkins support in GitVersion RedirectFrom: docs/build-server-support/build-server/jenkins diff --git a/docs/input/docs/reference/build-servers/myget.md b/docs/input/docs/reference/build-servers/myget.md index 383d61408a..fd9166aa52 100644 --- a/docs/input/docs/reference/build-servers/myget.md +++ b/docs/input/docs/reference/build-servers/myget.md @@ -1,5 +1,5 @@ --- -Order: 80 +Order: 100 Title: MyGet Description: Details on the MyGet support in GitVersion RedirectFrom: docs/build-server-support/build-server/myget diff --git a/docs/input/docs/reference/build-servers/octopus-deploy.md b/docs/input/docs/reference/build-servers/octopus-deploy.md index 79ce4035cd..d802be9e62 100644 --- a/docs/input/docs/reference/build-servers/octopus-deploy.md +++ b/docs/input/docs/reference/build-servers/octopus-deploy.md @@ -1,5 +1,5 @@ --- -Order: 90 +Order: 110 Title: Octopus Deploy Description: Details on the Octopus Deploy support in GitVersion RedirectFrom: docs/build-server-support/build-server/octopus-deploy diff --git a/docs/input/docs/reference/build-servers/teamcity.md b/docs/input/docs/reference/build-servers/teamcity.md index 55d663cc8d..da4e7aad01 100644 --- a/docs/input/docs/reference/build-servers/teamcity.md +++ b/docs/input/docs/reference/build-servers/teamcity.md @@ -1,5 +1,5 @@ --- -Order: 100 +Order: 120 Title: TeamCity Description: Details on the TeamCity support in GitVersion RedirectFrom: docs/build-server-support/build-server/teamcity diff --git a/docs/input/docs/reference/configuration.md b/docs/input/docs/reference/configuration.md index 6db30871b3..7cf48b6975 100644 --- a/docs/input/docs/reference/configuration.md +++ b/docs/input/docs/reference/configuration.md @@ -31,41 +31,317 @@ found that is generally what is needed when using GitFlow. To see the effective configuration (defaults and overrides), you can run `gitversion /showConfig`. -To create your config file just type `gitversion init` in your repo directory, -after [installing][installing]. A minimal `GitVersion.yml` configuration file will be -created. Modify this to suit your needs. ## Global configuration -The global configuration looks like this: +The following supported workflow configurations are available in GitVersion and can be referenced by the workflow property: +- GitFlow (GitFlow/v1) +- GitHubFlow (GitHubFlow/v1) + +Example of using a `GitHubFlow` workflow with a different `tag-prefix`: + +```yaml +workflow: GitHubFlow/v1 +tag-prefix: '[abc]' +``` + +The built-in configuration for the `GitFlow` workflow (`workflow: GitFlow/v1`) looks like: ```yaml -next-version: 1.0 assembly-versioning-scheme: MajorMinorPatch assembly-file-versioning-scheme: MajorMinorPatch -assembly-informational-format: '{InformationalVersion}' -mode: ContinuousDelivery -increment: Inherit -continuous-delivery-fallback-tag: ci -tag-prefix: '[vV]' +tag-prefix: '[vV]?' +version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* major-version-bump-message: '\+semver:\s?(breaking|major)' minor-version-bump-message: '\+semver:\s?(feature|minor)' patch-version-bump-message: '\+semver:\s?(fix|patch)' no-bump-message: '\+semver:\s?(none|skip)' -legacy-semver-padding: 4 -build-metadata-padding: 4 -commits-since-version-source-padding: 4 tag-pre-release-weight: 60000 -commit-message-incrementing: Enabled +commit-date-format: yyyy-MM-dd +merge-message-formats: {} +update-build-number: true +semantic-version-format: Strict +strategies: +- Fallback +- ConfiguredNextVersion +- MergeMessage +- TaggedCommit +- TrackReleaseBranches +- VersionInBranchName +branches: + develop: + label: alpha + increment: Minor + prevent-increment: + when-current-commit-tagged: false + track-merge-target: true + track-merge-message: true + regex: ^dev(elop)?(ment)?$ + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: true + is-release-branch: false + is-main-branch: false + pre-release-weight: 0 + main: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + track-merge-target: false + track-merge-message: true + regex: ^master$|^main$ + source-branches: [] + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + release: + mode: ManualDeployment + label: beta + increment: Minor + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + track-merge-target: false + regex: ^releases?[/-](?.+) + source-branches: + - main + - support + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + feature: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - develop + - main + - release + - support + - hotfix + is-source-branch-for: [] + is-main-branch: false + pre-release-weight: 30000 + pull-request: + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + label-number-pattern: '[/-](?\d+)' + track-merge-message: true + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - develop + - main + - release + - feature + - support + - hotfix + is-source-branch-for: [] + pre-release-weight: 30000 + hotfix: + mode: ManualDeployment + label: beta + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: ^hotfix(es)?[/-](?.+) + source-branches: + - main + - support + is-source-branch-for: [] + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + support: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + track-merge-target: false + regex: ^support[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: true + regex: (?.+) + source-branches: + - main + - develop + - release + - feature + - pull-request + - hotfix + - support + is-source-branch-for: [] + is-main-branch: false ignore: sha: [] - commits-before: yyyy-MM-ddTHH:mm:ss +mode: ContinuousDelivery +label: '{BranchName}' +increment: Inherit +prevent-increment: + of-merged-branch: false + when-branch-merged: false + when-current-commit-tagged: true +track-merge-target: false +track-merge-message: true +commit-message-incrementing: Enabled +regex: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false +``` + +The supported built-in configuration for the `GitHubFlow` workflow (`workflow: GitHubFlow/v1`) looks like: + +```yaml +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch +tag-prefix: '[vV]?' +version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* +major-version-bump-message: '\+semver:\s?(breaking|major)' +minor-version-bump-message: '\+semver:\s?(feature|minor)' +patch-version-bump-message: '\+semver:\s?(fix|patch)' +no-bump-message: '\+semver:\s?(none|skip)' +tag-pre-release-weight: 60000 +commit-date-format: yyyy-MM-dd merge-message-formats: {} update-build-number: true +semantic-version-format: Strict +strategies: +- Fallback +- ConfiguredNextVersion +- MergeMessage +- TaggedCommit +- TrackReleaseBranches +- VersionInBranchName +branches: + main: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + tracks-merge-target: false + tracks-merge-message: true + regex: ^master$|^main$ + source-branches: [] + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + release: + mode: ManualDeployment + label: beta + increment: Patch + prevent-increment: + of-merged-branch: true + when-branch-merged: false + when-current-commit-tagged: false + track-merge-target: false + track-merge-message: true + regex: ^releases?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + feature: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: ^features?[/-](?.+) + source-branches: + - main + - release + is-source-branch-for: [] + track-merge-message: true + is-main-branch: false + pre-release-weight: 30000 + pull-request: + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + label-number-pattern: '[/-](?\d+)' + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - main + - release + - feature + is-source-branch-for: [] + track-merge-message: true + pre-release-weight: 30000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: (?.+) + source-branches: + - main + - release + - feature + - pull-request + is-source-branch-for: [] + track-merge-message: false + is-main-branch: false +ignore: + sha: [] +mode: ContinuousDelivery +label: '{BranchName}' +increment: Inherit +prevent-increment: + of-merged-branch: false + when-branch-merged: false + when-current-commit-tagged: true +track-merge-target: false +track-merge-message: true +commit-message-incrementing: Enabled +regex: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false ``` The details of the available options are as follows: +### workflow + +The base template of the configuration to use. Possible values are `GitFlow/v1` or `GitHubFlow/v1`. Defaults to `GitFlow/v1` if not set. To create a configuration from scratch without using a base template, please specify an empty string. ### next-version Allows you to bump the next version explicitly. Useful for bumping `main` or a @@ -132,7 +408,7 @@ The default value is `{InformationalVersion}`. ### mode Sets the `mode` of how GitVersion should create a new version. Read more at -[versioning modes][modes]. +[deployment modes][modes]. ### increment @@ -141,34 +417,19 @@ increased, such as for commits after a tag: `Major`, `Minor`, `Patch`, `None`. The special value `Inherit` means that GitVersion should find the parent branch (i.e. the branch where the current branch was branched from), and use its values -for [increment](#increment), -[prevent-increment-of-merged-branch-version](#prevent-increment-of-merged-branch-version) -and [tracks-release-branches](#tracks-release-branches). - -### continuous-delivery-fallback-tag - -When using `mode: ContinuousDeployment`, the value specified in -`continuous-delivery-fallback-tag` will be used as the pre-release tag for -branches which do not have one specified. Default set to `ci`. +for [increment](#increment) or other branch related properties. -Just to clarify: For a build name without `...-ci-` or in other -words without a `PreReleaseTag` (ergo `"PreReleaseTag":""` in GitVersion's JSON output) -at the end you would need to set `continuous-delivery-fallback-tag` to an empty -string (`''`): - -```yaml -mode: ContinuousDeployment -continuous-delivery-fallback-tag: '' -... -``` +### tag-prefix -Doing so can be helpful if you use your `main` branch as a `release` branch. +A regular expression which is used to trim Git tags before processing (e.g., +v1.0.0). The default value is `[vV]`. -### tag-prefix +### version-in-branch-pattern -A regex which is used to trim Git tags before processing (e.g., v1.0.0). Default -is `[vV]`, although this is just for illustrative purposes as we do a IgnoreCase -match and could be `v`. +A regular expression which is used to determine the version number in the branch +name or commit message (e.g., v1.0.0-LTS). This setting only applies on branches +where the option `is-release-branch` is set to `true`. The default value is +`(?[vV]?\d+(\.\d+)?(\.\d+)?).*`. ### major-version-bump-message @@ -194,23 +455,8 @@ Used to tell GitVersion not to increment when in Mainline development mode. Default `\+semver:\s?(none|skip)`, which will match occurrences of `+semver: none` and `+semver: skip` -### legacy-semver-padding - -The number of characters to pad `LegacySemVer` to in the `LegacySemVerPadded` -[variable][variables]. Default is `4`, which will pad the `LegacySemVer` value - of `3.0.0-beta1` to `3.0.0-beta0001`. - -### build-metadata-padding - -The number of characters to pad `BuildMetaData` to in the `BuildMetaDataPadded` -[variable][variables]. Default is `4`, which will pad the `BuildMetaData` value -of `1` to `0001`. - -### commits-since-version-source-padding - -The number of characters to pad `CommitsSinceVersionSource` to in the -`CommitsSinceVersionSourcePadded` [variable][variables]. Default is `4`, which -will pad the `CommitsSinceVersionSource` value of `1` to `0001`. +When a commit matches **both** the `no-bump-message` **and** any combination of +the `version-bump-message`, `no-bump-message` takes precedence and no increment is applied. ### tag-pre-release-weight @@ -218,7 +464,7 @@ The pre-release weight in case of tagged commits. If the value is not set in the configuration, a default weight of 60000 is used instead. If the `WeightedPreReleaseNumber` [variable][variables] is 0 and this parameter is set, its value is used. This helps if your branching model is GitFlow and the last -release build, which is often tagged, can utilise this parameter to produce a +release build, which is often tagged, can utilize this parameter to produce a monotonically increasing build number. ### commit-message-incrementing @@ -276,7 +522,7 @@ e.g. ```yaml merge-message-formats: - tfs: ^Merged (?:PR (?\d+)): Merge (?.+) to (?.+) + tfs: '^Merged (?:PR (?\d+)): Merge (?.+) to (?.+)' ``` The regular expression should contain the following capture groups: @@ -311,87 +557,72 @@ branches: main: regex: ^master$|^main$ mode: ContinuousDelivery - tag: '' + label: '' increment: Patch prevent-increment-of-merged-branch-version: true track-merge-target: false source-branches: [ 'develop', 'release' ] tracks-release-branches: false is-release-branch: false - is-mainline: true + is-main-branch: true pre-release-weight: 55000 develop: regex: ^dev(elop)?(ment)?$ mode: ContinuousDeployment - tag: alpha + label: alpha increment: Minor prevent-increment-of-merged-branch-version: false track-merge-target: true source-branches: [] tracks-release-branches: true is-release-branch: false - is-mainline: false + is-main-branch: false pre-release-weight: 0 release: regex: ^releases?[/-] mode: ContinuousDelivery - tag: beta + label: beta increment: None prevent-increment-of-merged-branch-version: true track-merge-target: false source-branches: [ 'develop', 'main', 'support', 'release' ] tracks-release-branches: false is-release-branch: true - is-mainline: false + is-main-branch: false pre-release-weight: 30000 feature: regex: ^features?[/-] mode: ContinuousDelivery - tag: useBranchName + label: '{BranchName}' increment: Inherit - prevent-increment-of-merged-branch-version: false - track-merge-target: false source-branches: [ 'develop', 'main', 'release', 'feature', 'support', 'hotfix' ] - tracks-release-branches: false - is-release-branch: false - is-mainline: false pre-release-weight: 30000 pull-request: regex: ^(pull|pull\-requests|pr)[/-] mode: ContinuousDelivery - tag: PullRequest + label: PullRequest increment: Inherit - prevent-increment-of-merged-branch-version: false - tag-number-pattern: '[/-](?\d+)[-/]' - track-merge-target: false + label-number-pattern: '[/-](?\d+)[-/]' source-branches: [ 'develop', 'main', 'release', 'feature', 'support', 'hotfix' ] - tracks-release-branches: false - is-release-branch: false - is-mainline: false pre-release-weight: 30000 hotfix: regex: ^hotfix(es)?[/-] mode: ContinuousDelivery - tag: beta - increment: Patch - prevent-increment-of-merged-branch-version: false - track-merge-target: false - source-branches: [ 'develop', 'main', 'support' ] - tracks-release-branches: false - is-release-branch: false - is-mainline: false + label: beta + increment: Inherit + source-branches: [ 'release', 'main', 'support', 'hotfix' ] pre-release-weight: 30000 support: regex: ^support[/-] mode: ContinuousDelivery - tag: '' + label: '' increment: Patch prevent-increment-of-merged-branch-version: true track-merge-target: false source-branches: [ 'main' ] tracks-release-branches: false is-release-branch: false - is-mainline: true + is-main-branch: true pre-release-weight: 55000 ``` @@ -404,7 +635,9 @@ values, but here they are if you need to: ### regex This is the regex which is used to match the current branch to the correct -branch configuration. +branch configuration. + +[Named groups](https://learn.microsoft.com/en-us/dotnet/standard/base-types/grouping-constructs-in-regular-expressions#named-matched-subexpressions) can be used to dynamically label pre-releases based on the branch name, or parts of it. See [Label](#label) for more details and examples. ### source-branches @@ -474,7 +707,7 @@ Without this configuration value you would have to do: ```yaml branches: unstable: - regex: ... + regex: feature: source-branches: ['unstable', 'develop', 'feature', 'hotfix', 'support'] release: @@ -490,21 +723,25 @@ The header for all the individual branch configuration. Same as for the [global configuration, explained above](#mode). -### tag +### label + +The pre-release label to use for this branch. Use the value `{BranchName}` as a placeholder to +insert the value of the named group `BranchName` from the [regular expression](#regex). + +For example: branch `feature/foo` would become a pre-release label +of `alpha.foo` with `label: 'alpha.{BranchName}'` and `regex: '^features?[/-](?.+)'`. -The pre release tag to use for this branch. Use the value `useBranchName` to use -the branch name instead. For example `feature/foo` would become a pre-release -tag of `foo` with this value. Use the value `{BranchName}` as a placeholder to -insert the branch name. For example `feature/foo` would become a pre-release tag -of `alpha.foo` with the value of `alpha.{BranchName}`. +Another example: branch `features/sc-12345/some-description` would become a pre-release label of `sc-12345` with `label: '{StoryNo}'` and `regex: '^features?[/-](?sc-\d+)[-/].+'`. -**Note:** To clear a default use an empty string: `tag: ''` +**Note:** To clear a default use an empty string: `label: ''` ### increment Same as for the [global configuration, explained above](#increment). -### prevent-increment-of-merged-branch-version +### prevent-increment-of-merged-branch + +The increment of the branch merged to will be ignored, regardless of whether the merged branch has a version number or not, when this branch related property is set to true on the target branch. When `release-2.0.0` is merged into main, we want main to build `2.0.0`. If `release-2.0.0` is merged into develop we want it to build `2.1.0`, this option @@ -515,15 +752,23 @@ In a GitFlow-based repository, setting this option can have implications on the better version source proposed by the `MergeMessageBaseVersionStrategy`. For more details and an in-depth analysis, please see [the discussion][2506]. -### tag-number-pattern +### prevent-increment-when-branch-merged + +The increment of the merged branch will be ignored when this branch related property is set to `true` on the source branch. + +### prevent-increment-when-current-commit-tagged + +This branch related property controls the behvior whether to use the tagged (value set to true) or the incremented (value set to false) semantic version. Defaults to true. + +### label-number-pattern Pull requests require us to extract the pre-release number out of the branch name so `refs/pulls/534/merge` builds as `PullRequest.534`. This is a regex with a named capture group called `number`. If the branch `mode` is set to `ContinuousDeployment`, then the extracted -`number` is appended to the name of the pre-release tag and the number portion -is the number of commits since the last tag. This enables consecutive commits to +`number` is appended to the name of the pre-release label and the number portion +is the number of commits since the last label. This enables consecutive commits to the pull request branch to generate unique full semantic version numbers when the branch is configured to use ContinuousDeployment mode. @@ -533,17 +778,24 @@ the branch is configured to use ContinuousDeployment mode. branches: pull-request: mode: ContinuousDeployment - tag: PullRequest + label: PullRequest increment: Inherit track-merge-target: true - tag-number-pattern: '[/-](?\d+)[-/]' + label-number-pattern: '[/-](?\d+)[-/]' ``` ### track-merge-target Strategy which will look for tagged merge commits directly off the current branch. For example `develop` → `release/1.0.0` → merge into `main` and tag -`1.0.0`. The tag is *not* on develop, but develop should be version `1.0.0` now. +`1.0.0`. The tag is _not_ on develop, but develop should be version `1.0.0` now. + +### track-merge-message + +This property is a branch related property and gives the user the possibility to control the behavior of whether the merge +commit message will be interpreted as a next version or not. Consider we have a main branch and a `release/1.0.0` branch and +merge changes from `release/1.0.0` to the `main` branch. If `track-merge-message` is set to `true` then the next version will +be `1.0.0` otherwise `0.0.1`. ### tracks-release-branches @@ -553,10 +805,9 @@ Indicates this branch config represents develop in GitFlow. Indicates this branch config represents a release branch in GitFlow. -### is-mainline +### is-main-branch -When using Mainline mode, this indicates that this branch is a mainline. By -default `main` and `support/*` are mainlines. +This indicates that this branch is a main branch. By default `main` and `support/*` are main branches. ### pre-release-weight @@ -572,6 +823,19 @@ is set, it would be added to the `PreReleaseNumber` to get a final `pre-release-weight` will be used in the calculation. Related Issues [1145][1145] and [1366][1366]. +### semantic-version-format + +Specifies the semantic version format that is used when parsing the string. +Can be `Strict` - using the [regex](https://regex101.com/r/Ly7O1x/3/) +or `Loose` the old way of parsing. The default if not specified is `Strict` +Example of invalid `Strict`, but valid `Loose` + +``` +1.2-alpha4 +01.02.03-rc03 +1.2.3.4 +``` + [1145]: https://github.com/GitTools/GitVersion/issues/1145 [1366]: https://github.com/GitTools/GitVersion/issues/1366 [2506]: https://github.com/GitTools/GitVersion/pull/2506#issuecomment-754754037 @@ -581,3 +845,14 @@ and [1366][1366]. [modes]: /docs/reference/modes [variables]: /docs/reference/variables [version-sources]: /docs/reference/version-sources + +### strategies + +Specifies which version strategy implementation (one ore more) will be used to determine the next version. Following values are supported and can be combined: +- Fallback +- ConfiguredNextVersion +- MergeMessage +- TaggedCommit +- TrackReleaseBranches +- VersionInBranchName +- TrunkBased diff --git a/docs/input/docs/reference/modes/mainline.md b/docs/input/docs/reference/modes/mainline.md index 3c882715a9..10b8ccf22e 100644 --- a/docs/input/docs/reference/modes/mainline.md +++ b/docs/input/docs/reference/modes/mainline.md @@ -8,6 +8,10 @@ Description: | RedirectFrom: docs/reference/versioning-modes/mainline-development --- +:::{.alert .alert-danger} + **`Mainline` mode was deprecated in version 6 of GitVersion.** See [the following pull request](https://github.com/GitTools/GitVersion/pull/3844) for details. +::: + Mainline Development is enabled when using [GitHubFlow][githubflow] or any other strategy where you develop on `main`. The main rule of mainline development is that **main is always in a state that it could be deployed to production**. This diff --git a/docs/input/docs/reference/variables.md b/docs/input/docs/reference/variables.md index bb52759a96..8f963405fd 100644 --- a/docs/input/docs/reference/variables.md +++ b/docs/input/docs/reference/variables.md @@ -21,12 +21,9 @@ what is available. For the `release/3.0.0` branch of GitVersion it shows: "PreReleaseNumber": 99, "WeightedPreReleaseNumber": 1099, "BuildMetaData": 88, - "BuildMetaDataPadded": "0088", "FullBuildMetaData": "99.Branch.release/3.22.11.Sha.28c853159a46b5a87e6cc9c4f6e940c59d6bc68a", "MajorMinorPatch": "3.22.11", "SemVer": "3.22.11-beta.99", - "LegacySemVer": "3.22.11-beta99", - "LegacySemVerPadded": "3.22.11-beta0099", "AssemblySemVer": "3.22.11.0", "AssemblySemFileVer": "3.22.11.0", "InformationalVersion": "3.22.11-beta.99+88.Branch.release/3.022.011.Sha.28c853159a46b5a87e6cc9c4f6e940c59d6bc68a", @@ -35,13 +32,8 @@ what is available. For the `release/3.0.0` branch of GitVersion it shows: "EscapedBranchName": "release-3.022.011", "Sha": "28c853159a46b5a87e6cc9c4f6e940c59d6bc68a", "ShortSha": "28c8531", - "NuGetVersionV2": "3.22.11-beta0099", - "NuGetVersion": "3.22.11-beta0099", - "NuGetPreReleaseTagV2": "beta0099", - "NuGetPreReleaseTag": "beta0099", "VersionSourceSha": "28c853159a46b5a87e6cc9c4f6e940c59d6bc68a", "CommitsSinceVersionSource": 7, - "CommitsSinceVersionSourcePadded": "0007", "CommitDate": "2021-12-31", "UncommittedChanges": 0 } @@ -61,12 +53,9 @@ Each property of the above JSON document is described in the below table. | `PreReleaseNumber` | The pre-release number. | | `WeightedPreReleaseNumber` | A summation of branch specific `pre-release-weight` and the `PreReleaseNumber`. Can be used to obtain a monotonically increasing version number across the branches. | | `BuildMetaData` | The build metadata, usually representing number of commits since the `VersionSourceSha`. Despite its name, will not increment for every build. | -| `BuildMetaDataPadded` | The `BuildMetaData` padded with `0` up to 4 digits. | | `FullBuildMetaData` | The `BuildMetaData` suffixed with `BranchName` and `Sha`. | | `MajorMinorPatch` | `Major`, `Minor` and `Patch` joined together, separated by `.`. | | `SemVer` | The semantical version number, including `PreReleaseTagWithDash` for pre-release version numbers. | -| `LegacySemVer` | Equal to `SemVer`, but without a `.` separating `PreReleaseLabel` and `PreReleaseNumber`. | -| `LegacySemVerPadded` | Equal to `LegacySemVer`, but with `PreReleaseNumber` padded with `0` up to 4 digits. | | `AssemblySemVer` | Suitable for .NET `AssemblyVersion`. Defaults to `Major.Minor.0.0` to allow the assembly to be hotfixed without breaking existing applications that may be referencing it. | | `AssemblySemFileVer` | Suitable for .NET `AssemblyFileVersion`. Defaults to `Major.Minor.Patch.0`. | | `InformationalVersion` | Suitable for .NET `AssemblyInformationalVersion`. Defaults to `FullSemVer` suffixed by `FullBuildMetaData`. | @@ -75,13 +64,8 @@ Each property of the above JSON document is described in the below table. | `EscapedBranchName` | Equal to `BranchName`, but with `/` replaced with `-`. | | `Sha` | The SHA of the Git commit. | | `ShortSha` | The `Sha` limited to 7 characters. | -| `NuGetVersionV2` | A NuGet 2.0 compatible version number. | -| `NuGetVersion` | A NuGet 1.0 compatible version number. | -| `NuGetPreReleaseTagV2` | A NuGet 2.0 compatible `PreReleaseTag`. | -| `NuGetPreReleaseTag` | A NuGet 1.0 compatible `PreReleaseTag`. | | `VersionSourceSha` | The SHA of the commit used as version source. | | `CommitsSinceVersionSource` | The number of commits since the version source. | -| `CommitsSinceVersionSourcePadded` | The `CommitsSinceVersionSource` padded with `0` up to 4 digits. | | `CommitDate` | The ISO-8601 formatted date of the commit identified by `Sha`. | | `UncommittedChanges` | The number of uncommitted changes present in the repository. | diff --git a/docs/input/docs/reference/version-increments.md b/docs/input/docs/reference/version-increments.md index f6e31f3cf2..dc58676a0f 100644 --- a/docs/input/docs/reference/version-increments.md +++ b/docs/input/docs/reference/version-increments.md @@ -95,14 +95,25 @@ you can leverage this feature as follows: ```yaml mode: MainLine # Only add this if you want every version to be created automatically on your main branch. -major-version-bump-message: "^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)" -minor-version-bump-message: "^(feat)(\\([\\w\\s-]*\\))?:" -patch-version-bump-message: "^(build|chore|ci|docs|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?:" +major-version-bump-message: "^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-,/\\\\]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)" +minor-version-bump-message: "^(feat)(\\([\\w\\s-,/\\\\]*\\))?:" +patch-version-bump-message: "^(fix|perf)(\\([\\w\\s-,/\\\\]*\\))?:" ``` This will ensure that your version gets bumped according to the commits you've created. +If your CI/CD workflow uses semantic-release's commit-analyzer, change +`(fix|perf)` to `(fix|perf|revert)`. +[Why?](https://github.com/semantic-release/commit-analyzer/blob/75c9c87c88772d7ded4ca9614852b42519e41931/lib/default-release-rules.js#L8C1-L8C38) + +Alternatively, you can override this rule in the +[configuration](https://github.com/semantic-release/commit-analyzer/tree/master#usage) +of \@semantic-release/commit-analyzer. If you intend to write rules with +patterns, note that instead of using Regular Expression, +\@semantic-release/commit-analyzer uses +[micromatch's glob implementation](https://github.com/micromatch/micromatch#matching-features). + ### GitVersion.yml The first is by setting the `next-version` property in the GitVersion.yml file. @@ -116,9 +127,9 @@ from the branch name as a source. However, GitVersion can't use the [branch name as a version source for _other branches_][faq-branch-name-source]. ### Detached HEAD -If HEAD is in detached state tag will be `-no-branch-`. +If HEAD is in detached state tag will be `-no-branch-`. -Example: `0.1.0--no-branch-.1+4` +Example: `0.0.1--no-branch-.1+4` ### Tagging commit @@ -126,11 +137,17 @@ By tagging a commit, GitVersion will use that tag for the version of that commit, then increment the next commit automatically based on the increment rules for that branch (some branches bump patch, some minor). +Be aware that tags are local to a repository and will not be transferred when +you perform a default `git push`. Instead, tags can be pushed separately with +their own command. For more information, read the [git documentation on +tagging][git-tagging]. + + ### Incrementing per commit -When using the continuous deployment `mode` (which will increment the SemVer every -commit) all builds _must_ have a pre-release tag, except for builds that are -explicitly tagged as stable. +When using the continuous deployment `mode` (which will increment the SemVer +every commit) all builds _must_ have a pre-release tag, except for builds that +are explicitly tagged as stable. Then the build metadata (which is the commit count) is promoted to the pre-release tag. Applying these rules, the above commit-graph would produce: @@ -148,7 +165,8 @@ b5d142 -> 2.0.0-ci.0 (2.0.0 branch was merged, so main is now at 2.0.0) As you can see, the versions now no longer conflict. When you want to create a stable `2.0.0` release you simply `git tag 2.0.0`, then build the tag, and it -will produce a stable `2.0.0` package. +will produce a stable `2.0.0` package. Be aware that +[tags are not transferred with `git push`](#tagging-commit) For more information/background on why we have come to this conclusion, read [Xavier Decoster's blog post on the subject][auto-incremented-nuget-package]. @@ -157,3 +175,4 @@ For more information/background on why we have come to this conclusion, read [continuous-delivery]: /docs/reference/modes/continuous-delivery [conventional-commits]: https://www.conventionalcommits.org/ [faq-branch-name-source]: /docs/learn/faq#merged-branch-names-as-version-source +[git-tagging]: https://git-scm.com/book/en/v2/Git-Basics-Tagging \ No newline at end of file diff --git a/docs/input/docs/usage/cli/arguments.md b/docs/input/docs/usage/cli/arguments.md index 14d7c8f996..059d1c385d 100644 --- a/docs/input/docs/usage/cli/arguments.md +++ b/docs/input/docs/usage/cli/arguments.md @@ -34,13 +34,17 @@ GitVersion [path] 'file' or 'buildserver', will default to 'json'. /outputfile Path to output file. It is used in combination with /output 'file'. - /showvariable Used in conjuntion with /output json, will output just a + /showvariable Used in conjunction with /output json, will output just a particular variable. E.g. /output json /showvariable SemVer - will output `1.2.3+beta.4` + /format Used in conjunction with /output json, will output a format + containing version variables. + E.g. /output json /format {SemVer} - will output `1.2.3+beta.4` + /output json /format {Major}.{Minor} - will output `1.2` /l Path to logfile. - /config Path to config file (defaults to GitVersion.yml) + /config Path to config file (defaults to GitVersion.yml or GitVersion.yaml) /showconfig Outputs the effective GitVersion config (defaults + custom - from GitVersion.yml) in yaml format + from GitVersion.yml or GitVersion.yaml) in yaml format /overrideconfig Overrides GitVersion config values inline (semicolon- separated key value pairs e.g. /overrideconfig tag-prefix=Foo) @@ -61,13 +65,10 @@ GitVersion [path] (.csproj/.vbproj/.fsproj) files in the git repo and update them Note: This is only compatible with the newer Sdk projects - /updateassemblyinfofilename - Specify name of AssemblyInfo file. Can also - /updateAssemblyInfo GlobalAssemblyInfo.cs as a shorthand /ensureassemblyinfo If the assembly info file specified with - /updateassemblyinfo or /updateassemblyinfofilename is not - found, it be created with these attributes: + /updateassemblyinfo is not + found, it will be created with these attributes: AssemblyFileVersion, AssemblyVersion and AssemblyInformationalVersion. Supports writing version info for: C#, F#, VB @@ -99,7 +100,7 @@ gitversion init Configuration utility for gitversion ## Override config -`/overrideconfig [key=value]` will override appropriate `key` from 'GitVersion.yml'. +`/overrideconfig [key=value]` will override appropriate `key` from 'GitVersion.yml' or 'GitVersion.yaml'. To specify multiple options add multiple `/overrideconfig [key=value]` entries: `/overrideconfig key1=value1 /overrideconfig key2=value2`. @@ -115,13 +116,10 @@ Following options are supported: 3. `assembly-informational-format` 4. `assembly-versioning-format` 5. `assembly-versioning-scheme` -6. `build-metadata-padding` 7. `commit-date-format` 8. `commit-message-incrementing` -9. `commits-since-version-source-padding` -10. `continuous-delivery-fallback-tag` +10. `label` 11. `increment` -12. `legacy-semver-padding` 13. `major-version-bump-message` 14. `minor-version-bump-message` 15. `mode` @@ -134,7 +132,7 @@ Following options are supported: Read more about [Configuration](/docs/reference/configuration). -Using `override-config` on the command line will not change the contents of the config file `GitVersion.yml`. +Using `override-config` on the command line will not change the contents of the config file `GitVersion.yml` or `GitVersion.yaml`. ### Example: How to override configuration option 'tag-prefix' to use prefix 'custom' diff --git a/docs/input/docs/usage/cli/installation.md b/docs/input/docs/usage/cli/installation.md index 1ea0ac2aab..3699db9447 100644 --- a/docs/input/docs/usage/cli/installation.md +++ b/docs/input/docs/usage/cli/installation.md @@ -36,7 +36,7 @@ enter the following into a terminal: brew install gitversion ``` -Switches are available with `gitversion --help`. Even though the documentation +Switches are available with `gitversion -h`. Even though the documentation uses a slash `/` for all switches, you need to use a dash `-` instead, since `/` is interpreted as a root path on POSIX based operating systems. diff --git a/docs/input/docs/usage/docker.md b/docs/input/docs/usage/docker.md new file mode 100644 index 0000000000..5d70058ce1 --- /dev/null +++ b/docs/input/docs/usage/docker.md @@ -0,0 +1,27 @@ +--- +Order: 50 +Title: Docker +Description: | + Use GitVersion through one of its many published Docker containers. +--- + +GitVersion can be used through one of its many published Docker +containers. The list of available containers can be found on +[Docker Hub][docker-hub]. Once you've found the image you want to use, +you can run it like this: + +```shell +docker run --rm --volume "$(pwd):/repo" gittools/gitversion:6.0.0-fedora.36-6.0 /repo +``` + +The above command will run GitVersion with the current directory +mapped to `/repo` inside the container (the `--volume "$(pwd):/repo"` +part). The `/repo` directory is then passed in as the argument +GitVersion should use to calculate the version. + +The `--rm` flag will remove the container after it has finished +running. + +[Explore GitVersion on Docker Hub][docker-hub]{.btn .btn-primary} + +[docker-hub]: https://hub.docker.com/r/gittools/gitversion diff --git a/docs/input/docs/usage/library.md b/docs/input/docs/usage/library.md index cec061ecdb..0eaeb6a481 100644 --- a/docs/input/docs/usage/library.md +++ b/docs/input/docs/usage/library.md @@ -15,9 +15,9 @@ patch releases, it's a useful option to some. :::{.alert .alert-warning} **Warning** - -We are not semantically versioning this library and it should be considered -unstable. +The library API is not stable and does not follow the semantic versioning +of the GitVersion tool. A patch release of the tool may break the library +and we will refactor and change the library API without notice. ::: Explore the GitVersion library API diff --git a/docs/input/docs/usage/msbuild.md b/docs/input/docs/usage/msbuild.md index 64e06e9b9b..23c158ac73 100644 --- a/docs/input/docs/usage/msbuild.md +++ b/docs/input/docs/usage/msbuild.md @@ -91,6 +91,12 @@ versioning your assemblies like a champ. However, more can be done to further customize the build process. Keep reading to find out how the version variables are set and how you can use them in MSBuild tasks. +## Configuration + +The [configuration file](/docs/reference/configuration), if any, is read from a file +the `GitVersion.yml` the root of the repository or the project directory. Since version 3, +the path to the configuration file itself [cannot be configured](https://github.com/GitTools/GitVersion/issues/3009). + ## How does it work? After being installed into a project, the MSBuild task will wire GitVersion into @@ -258,14 +264,26 @@ For SDK-style projects, `UpdateVersionProperties` controls setting the default variables: `Version`, `VersionPrefix`, `VersionSuffix`, `PackageVersion`, `InformationalVersion`, `AssemblyVersion` and `FileVersion`. +### Namespace generation + +You can configure GitVersion to generate the `GitVersionInformation` class in a namespace that matches the current assembly. By default this class is created in the global namespace. If `UseProjectNamespaceForGitVersionInformation` is set to true, the `GitVersionInfomation` class will instead be generated in a namespace matching the current project. If the property `` is set that value will be used, otherwise the name of the project file is used. + +```xml + + ... + true + ... + +``` + ## Extra properties -There are properties that correspont to certain +There are properties that correspont to certain [command line arguments](/docs/usage/cli/arguments) for GetVersion task. -In particular, setting `GitVersion_NoFetchEnabled` to `true` disables `git fetch` -during version calculation, setting `GitVersion_NoNormalizeEnabled` to `true` disables +In particular, setting `GitVersion_NoFetchEnabled` to `true` disables `git fetch` +during version calculation, setting `GitVersion_NoNormalizeEnabled` to `true` disables normalize step on a build server, setting `GitVersion_NoCacheEnabled` to `true` -makes GetVersion ignore cache. All the rest command line arguments can be passed via +makes GetVersion ignore cache. All the rest command line arguments can be passed via `GitVersion_CommandLineArguments` variable. ## My Git repository requires authentication. What should I do? diff --git a/docs/readme.md b/docs/readme.md index a35ed62c43..6d89c8deaf 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -17,25 +17,35 @@ expected. ## Serving the documentation locally -To serve up the documentation locally, you need to run the `build.ps1` script -with the arguments `-Target Preview-Documentation`. +To serve up the documentation locally, you need to run the following +commands: + +```shell +./build.ps1 -Stage build -Target PrepareBuild +./build.ps1 -Stage build -Target Build +./build.ps1 -Stage docs -Target PreviewDocs +``` ### On Windows -On Windows, you need to run the following build command in a PowerShell +On Windows, you need to run the following commands in a PowerShell terminal: ```shell -.\build.ps1 -Target Preview-Documentation +./build.ps1 -Stage build -Target PrepareBuild +./build.ps1 -Stage build -Target Build +./build.ps1 -Stage docs -Target PreviewDocs ``` ### On Unix First you need to [install PowerShell on macOS][ps-mac] or [Linux][ps-linux], -then execute the following command: +then execute the following commands: ```shell -pwsh build.ps1 -Target Preview-Documentation +./build.ps1 -Stage build -Target PrepareBuild +./build.ps1 -Stage build -Target Build +./build.ps1 -Stage docs -Target PreviewDocs ``` After pressing enter, the documentation will be generated and then served under diff --git a/dotnet-tools.json b/dotnet-tools.json deleted file mode 100644 index 4c6f94aa79..0000000000 --- a/dotnet-tools.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "version": 1, - "isRoot": true, - "tools": { - "codecov.tool": { - "version": "1.13.0", - "commands": [ - "codecov" - ] - }, - "gitversion.tool": { - "version": "5.10.1", - "commands": [ - "dotnet-gitversion" - ] - }, - "gitreleasemanager.tool": { - "version": "0.13.0", - "commands": [ - "dotnet-gitreleasemanager" - ] - }, - "Wyam2.Tool": { - "version": "3.0.0-rc3", - "commands": [ - "wyam2" - ] - } - } -} diff --git a/global.json b/global.json new file mode 100644 index 0000000000..20f980a181 --- /dev/null +++ b/global.json @@ -0,0 +1,10 @@ +{ + "projects": [ + "build", + "new-cli", + "src" + ], + "sdk": { + "version": "8.0.300" + } +} diff --git a/new-cli/.run/Calculate.run.xml b/new-cli/.run/Calculate.run.xml new file mode 100644 index 0000000000..0eafa18c92 --- /dev/null +++ b/new-cli/.run/Calculate.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Config Help.run.xml b/new-cli/.run/Config Help.run.xml new file mode 100644 index 0000000000..1010e91c4e --- /dev/null +++ b/new-cli/.run/Config Help.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Config Init.run.xml b/new-cli/.run/Config Init.run.xml new file mode 100644 index 0000000000..a9710c930c --- /dev/null +++ b/new-cli/.run/Config Init.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Config Show.run.xml b/new-cli/.run/Config Show.run.xml new file mode 100644 index 0000000000..732ae409a4 --- /dev/null +++ b/new-cli/.run/Config Show.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Help.run.xml b/new-cli/.run/Help.run.xml new file mode 100644 index 0000000000..1942858a7d --- /dev/null +++ b/new-cli/.run/Help.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Normalize.run.xml b/new-cli/.run/Normalize.run.xml new file mode 100644 index 0000000000..2c30468dce --- /dev/null +++ b/new-cli/.run/Normalize.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Output AssemblyInfo.run.xml b/new-cli/.run/Output AssemblyInfo.run.xml new file mode 100644 index 0000000000..6e59af4e57 --- /dev/null +++ b/new-cli/.run/Output AssemblyInfo.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Output Help.run.xml b/new-cli/.run/Output Help.run.xml new file mode 100644 index 0000000000..1950abc17f --- /dev/null +++ b/new-cli/.run/Output Help.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Output Project.run.xml b/new-cli/.run/Output Project.run.xml new file mode 100644 index 0000000000..5d8cf02a32 --- /dev/null +++ b/new-cli/.run/Output Project.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Output Wix.run.xml b/new-cli/.run/Output Wix.run.xml new file mode 100644 index 0000000000..fa1fdd93b2 --- /dev/null +++ b/new-cli/.run/Output Wix.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Tester.run.xml b/new-cli/.run/Tester.run.xml new file mode 100644 index 0000000000..5870f80cee --- /dev/null +++ b/new-cli/.run/Tester.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/.run/Version.run.xml b/new-cli/.run/Version.run.xml new file mode 100644 index 0000000000..7cb482298e --- /dev/null +++ b/new-cli/.run/Version.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/new-cli/Directory.Build.props b/new-cli/Directory.Build.props new file mode 100644 index 0000000000..ea7d0c9db2 --- /dev/null +++ b/new-cli/Directory.Build.props @@ -0,0 +1,40 @@ + + + net8.0 + GitVersion + + latest + enable + enable + 8625;2254;IDE0005 + + en + true + latest + true + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + diff --git a/new-cli/Directory.Packages.props b/new-cli/Directory.Packages.props new file mode 100644 index 0000000000..a5d3819823 --- /dev/null +++ b/new-cli/Directory.Packages.props @@ -0,0 +1,25 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/new-cli/GitVersion.Calculation/CalculateCommand.cs b/new-cli/GitVersion.Calculation/CalculateCommand.cs new file mode 100644 index 0000000000..56dae32c90 --- /dev/null +++ b/new-cli/GitVersion.Calculation/CalculateCommand.cs @@ -0,0 +1,30 @@ +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +public record CalculateSettings : GitVersionSettings; + +[Command("calculate", "Calculates the version object from the git history.")] +public class CalculateCommand(ILogger logger, IService service, IGitRepository repository) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + private readonly IGitRepository repository = repository.NotNull(); + + public Task InvokeAsync(CalculateSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + if (settings.WorkDir != null) + { + this.repository.DiscoverRepository(settings.WorkDir.FullName); + var branches = this.repository.Branches.ToList(); + this.logger.LogInformation("Command : 'calculate', LogFile : '{logFile}', WorkDir : '{workDir}' ", + settings.LogFile, settings.WorkDir); + this.logger.LogInformation("Found {count} branches", branches.Count); + } + + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Calculation/GitVersion.Calculation.csproj b/new-cli/GitVersion.Calculation/GitVersion.Calculation.csproj new file mode 100644 index 0000000000..60c08008b5 --- /dev/null +++ b/new-cli/GitVersion.Calculation/GitVersion.Calculation.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/new-cli/GitVersion.Cli.Generator/CommandImplGenerator.cs b/new-cli/GitVersion.Cli.Generator/CommandImplGenerator.cs new file mode 100644 index 0000000000..b5fcc2fb1b --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/CommandImplGenerator.cs @@ -0,0 +1,157 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Scriban; +// ReSharper disable InconsistentNaming +namespace GitVersion; + +[Generator(LanguageNames.CSharp)] +public class CommandImplGenerator : IIncrementalGenerator +{ + private const string GeneratedNamespaceName = "GitVersion.Generated"; + private const string InfraNamespaceName = "GitVersion"; + private const string DependencyInjectionNamespaceName = "GitVersion.Infrastructure"; + private const string CommandNamespaceName = "GitVersion.Commands"; + private const string CommandInterfaceFullName = $"{InfraNamespaceName}.ICommand"; + private const string CommandAttributeFullName = $"{InfraNamespaceName}.CommandAttribute"; + private const string CommandAttributeGenericFullName = $"{InfraNamespaceName}.CommandAttribute"; + private const string OptionAttributeFullName = $"{InfraNamespaceName}.OptionAttribute"; + + public void Initialize(IncrementalGeneratorInitializationContext context) + { + var commandTypes = context.CompilationProvider.Select(SelectCommandTypes); + + context.RegisterImplementationSourceOutput(commandTypes, GenerateSourceCode); + } + + private static ImmutableArray SelectCommandTypes(Compilation compilation, CancellationToken ct) + { + ct.ThrowIfCancellationRequested(); + + var visitor = new TypeVisitor(SearchQuery, ct); + visitor.Visit(compilation.GlobalNamespace); + var selectCommandTypes = visitor.GetResults(); + + return [.. selectCommandTypes.Select(selectCommandType => MapToCommandInfo(selectCommandType, ct))]; + + static bool SearchQuery(INamedTypeSymbol typeSymbol) + { + var attributeData = typeSymbol.GetAttributeData(CommandAttributeFullName) ?? typeSymbol.GetAttributeData(CommandAttributeGenericFullName); + return attributeData is not null; + } + } + private static void GenerateSourceCode(SourceProductionContext context, ImmutableArray commandInfos) + { + foreach (var commandInfo in commandInfos) + { + if (commandInfo == null) + continue; + + var commandHandlerTemplate = Template.Parse(Content.CommandImplContent); + + var commandHandlerSource = commandHandlerTemplate.Render(new + { + Model = commandInfo, + Namespace = GeneratedNamespaceName + }, member => member.Name); + + context.AddSource($"{commandInfo.CommandTypeName}Impl.g.cs", string.Join("\n", commandHandlerSource)); + } + + var commandHandlersModuleTemplate = Template.Parse(Content.CommandsModuleContent); + var commandHandlersModuleSource = commandHandlersModuleTemplate.Render(new + { + Model = commandInfos, + Namespace = GeneratedNamespaceName, + InfraNamespaceName, + DependencyInjectionNamespaceName, + CommandNamespaceName + }, member => member.Name); + context.AddSource("CommandsModule.g.cs", string.Join("\n", commandHandlersModuleSource)); + + var rootCommandHandlerTemplate = Template.Parse(Content.RootCommandImplContent); + var rootCommandHandlerSource = rootCommandHandlerTemplate.Render(new + { + Namespace = GeneratedNamespaceName, + InfraNamespaceName + }, member => member.Name); + context.AddSource("RootCommandImpl.g.cs", string.Join("\n", rootCommandHandlerSource)); + } + private static CommandInfo? MapToCommandInfo(ITypeSymbol classSymbol, CancellationToken ct) + { + ct.ThrowIfCancellationRequested(); + + var commandAttribute = classSymbol.GetAttributeData(CommandAttributeFullName) ?? classSymbol.GetAttributeData(CommandAttributeGenericFullName); + if (commandAttribute is null) return null; + + var ctorArguments = commandAttribute.ConstructorArguments; + + var name = Convert.ToString(ctorArguments[0].Value); + var description = Convert.ToString(ctorArguments[1].Value); + + ArgumentNullException.ThrowIfNull(name); + ArgumentNullException.ThrowIfNull(description); + + ITypeSymbol? parentCommandType = null; + if (commandAttribute.AttributeClass != null && commandAttribute.AttributeClass.TypeArguments.Any()) + { + parentCommandType = commandAttribute.AttributeClass.TypeArguments.Single(); + } + + var commandBase = classSymbol.AllInterfaces.SingleOrDefault(x => x.OriginalDefinition.ToDisplayString() == CommandInterfaceFullName); + if (commandBase is null) return null; + + var settingsType = commandBase.TypeArguments.Single(); + + var properties = settingsType.GetAllMembers().ToArray(); + + var settingsPropertyInfos = + from propertySymbol in properties + let optionAttribute = propertySymbol.GetAttributeData(OptionAttributeFullName) + where optionAttribute is not null + select MapToPropertyInfo(propertySymbol, optionAttribute); + + var commandInfo = new CommandInfo + { + ParentCommand = parentCommandType?.Name, + CommandTypeName = classSymbol.Name, + CommandTypeNamespace = classSymbol.ContainingNamespace.ToDisplayString(), + CommandName = name, + CommandDescription = description, + SettingsTypeName = settingsType.Name, + SettingsTypeNamespace = settingsType.ContainingNamespace.ToDisplayString(), + SettingsProperties = settingsPropertyInfos.ToArray() + }; + return commandInfo; + } + private static SettingsPropertyInfo MapToPropertyInfo(IPropertySymbol propertySymbol, AttributeData attribute) + { + var ctorArguments = attribute.ConstructorArguments; + + var name = Convert.ToString(ctorArguments[0].Value); + var description = Convert.ToString(ctorArguments[1].Value); + + ArgumentNullException.ThrowIfNull(name); + ArgumentNullException.ThrowIfNull(description); + + string alias = string.Empty; + if (ctorArguments.Length == 3) + { + var aliasesArgs = ctorArguments[2]; + var aliases = (aliasesArgs.Kind == TypedConstantKind.Array + ? aliasesArgs.Values.Select(x => Convert.ToString(x.Value)).ToArray() + : [Convert.ToString(aliasesArgs.Value)]).Select(x => $@"""{x?.Trim()}"""); + alias = string.Join(", ", aliases); + } + + var isRequired = propertySymbol.Type.NullableAnnotation == NullableAnnotation.NotAnnotated; + return new() + { + Name = propertySymbol.Name, + TypeName = propertySymbol.Type.ToDisplayString(), + OptionName = name, + Aliases = alias, + Description = description, + Required = isRequired + }; + } +} diff --git a/new-cli/GitVersion.Cli.Generator/Content.cs b/new-cli/GitVersion.Cli.Generator/Content.cs new file mode 100644 index 0000000000..f3a2484a68 --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/Content.cs @@ -0,0 +1,132 @@ +namespace GitVersion; + +public static class Content +{ + /*language=cs*/ + private const string GeneratedHeader = """ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ +#nullable enable +"""; + + /*language=cs*/ + public const string CommandImplContent = $$$""" +{{{GeneratedHeader}}} +using System.CommandLine; +using System.CommandLine.Binding; + +using {{Model.CommandTypeNamespace}}; +{{- if Model.SettingsTypeNamespace != Model.CommandTypeNamespace }} +using {{Model.SettingsTypeNamespace}};{{ end }} + +namespace {{Namespace}}; + +public class {{Model.CommandTypeName}}Impl : CliCommand, ICommandImpl +{ + public string CommandName => nameof({{Model.CommandTypeName}}Impl); + {{- if (Model.ParentCommand | string.empty) }} + public string ParentCommandName => string.Empty; + {{- else }} + public string ParentCommandName => nameof({{Model.ParentCommand}}Impl); + {{ end }} + {{- $settingsProperties = Model.SettingsProperties | array.sort "Name" }} + // Options list + {{~ for $prop in $settingsProperties ~}} + protected readonly CliOption<{{$prop.TypeName}}> {{$prop.Name}}Option; + {{~ end ~}} + + public {{Model.CommandTypeName}}Impl({{Model.CommandTypeName}} command) + : base("{{Model.CommandName}}", "{{Model.CommandDescription}}") + { + {{~ for $prop in $settingsProperties ~}} + {{$prop.Name}}Option = new CliOption<{{$prop.TypeName}}>("{{$prop.OptionName}}", [{{$prop.Aliases}}]) + { + Required = {{$prop.Required}}, + Description = "{{$prop.Description}}", + }; + {{~ end ~}} + + {{- for $prop in $settingsProperties ~}} + Add({{$prop.Name}}Option); + {{~ end ~}} + + this.SetAction(Run); + return; + + Task Run(ParseResult parseResult, CancellationToken cancellationToken) + { + var settings = new {{Model.SettingsTypeName}} + { + {{~ for $prop in $settingsProperties ~}} + {{$prop.Name}} = parseResult.GetValue({{$prop.Name}}Option){{ if $prop.Required }}!{{ end}}, + {{~ end ~}} + }; + return command.InvokeAsync(settings, cancellationToken); + } + } +} +"""; + + /*language=cs*/ + public const string RootCommandImplContent = $$$""" +{{{GeneratedHeader}}} +using System.CommandLine; +using {{InfraNamespaceName}}; +namespace {{Namespace}}; + +public class RootCommandImpl : CliRootCommand +{ + public RootCommandImpl(IEnumerable commands) + { + var map = commands.ToDictionary(c => c.CommandName); + foreach (var command in map.Values) + { + AddCommand(command, map); + } + } + private void AddCommand(ICommandImpl command, IDictionary map) + { + if (!string.IsNullOrWhiteSpace(command.ParentCommandName)) + { + var parent = map[command.ParentCommandName] as CliCommand; + parent?.Add((CliCommand)command); + } + else + { + Add((CliCommand)command); + } + } +} +"""; + + /*language=cs*/ + public const string CommandsModuleContent = $$$""" +{{{GeneratedHeader}}} +using System.CommandLine; +using {{DependencyInjectionNamespaceName}}; +using {{CommandNamespaceName}}; +using {{InfraNamespaceName}}; + +namespace {{Namespace}}; + +public class CommandsImplModule : IGitVersionModule +{ + public void RegisterTypes(IContainerRegistrar services) + { + {{- $commands = Model | array.sort "CommandTypeName" }} + services.AddSingleton(); + {{~ for $command in $commands ~}} + services.AddSingleton<{{$command.CommandTypeName}}>(); + services.AddSingleton(); + + {{~ end ~}} + } +} +"""; +} diff --git a/new-cli/GitVersion.Cli.Generator/GitVersion.Cli.Generator.csproj b/new-cli/GitVersion.Cli.Generator/GitVersion.Cli.Generator.csproj new file mode 100644 index 0000000000..21318fd5e6 --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/GitVersion.Cli.Generator.csproj @@ -0,0 +1,17 @@ + + + + true + true + en + true + $(NoWarn);RS1035 + + + + + + + + + diff --git a/new-cli/GitVersion.Cli.Generator/Models.cs b/new-cli/GitVersion.Cli.Generator/Models.cs new file mode 100644 index 0000000000..6b91007d9b --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/Models.cs @@ -0,0 +1,23 @@ +namespace GitVersion; + +internal record CommandInfo +{ + public string? ParentCommand { get; init; } + public required string CommandTypeNamespace { get; init; } + public required string CommandTypeName { get; init; } + public required string CommandName { get; init; } + public required string CommandDescription { get; init; } + public required string SettingsTypeName { get; init; } + public required string SettingsTypeNamespace { get; init; } + public required SettingsPropertyInfo[] SettingsProperties { get; init; } = []; +} + +internal record SettingsPropertyInfo +{ + public required string Name { get; init; } + public required string TypeName { get; init; } + public required string OptionName { get; init; } + public required string Aliases { get; init; } + public required string Description { get; init; } + public required bool Required { get; init; } +} diff --git a/new-cli/GitVersion.Cli.Generator/Properties/launchSettings.json b/new-cli/GitVersion.Cli.Generator/Properties/launchSettings.json new file mode 100644 index 0000000000..c184e457e2 --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "SourceGenerator": { + "commandName": "DebugRoslynComponent", + "targetProject": "..\\GitVersion.Cli\\GitVersion.Cli.csproj" + } + } +} \ No newline at end of file diff --git a/new-cli/GitVersion.Cli.Generator/RoslynExtensions.cs b/new-cli/GitVersion.Cli.Generator/RoslynExtensions.cs new file mode 100644 index 0000000000..0935ec5715 --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/RoslynExtensions.cs @@ -0,0 +1,30 @@ +using Microsoft.CodeAnalysis; + +namespace GitVersion; + +public static class RoslynExtensions +{ + private static IEnumerable GetBaseTypesAndThis(this ITypeSymbol type) + { + var current = type; + while (current != null) + { + yield return current; + current = current.BaseType; + } + } + + public static IEnumerable GetBaseTypes(this ITypeSymbol type) + { + var current = type.BaseType; + while (current != null) + { + yield return current; + current = current.BaseType; + } + } + + public static IEnumerable GetAllMembers(this ITypeSymbol type) where T : ISymbol => type.GetBaseTypesAndThis().SelectMany(n => n.GetMembers().OfType()); + + public static AttributeData? GetAttributeData(this ISymbol namedType, string fullName) => namedType.GetAttributes().SingleOrDefault(a => a.AttributeClass?.OriginalDefinition.ToDisplayString() == fullName); +} diff --git a/new-cli/GitVersion.Cli.Generator/TypeVisitor.cs b/new-cli/GitVersion.Cli.Generator/TypeVisitor.cs new file mode 100644 index 0000000000..3094435293 --- /dev/null +++ b/new-cli/GitVersion.Cli.Generator/TypeVisitor.cs @@ -0,0 +1,37 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; + +namespace GitVersion; + +internal class TypeVisitor(Func searchQuery, CancellationToken cancellation) + : SymbolVisitor +{ + private readonly HashSet _exportedTypes = new(SymbolEqualityComparer.Default); + + public ImmutableArray GetResults() => [.. this._exportedTypes]; + + public override void VisitAssembly(IAssemblySymbol symbol) + { + cancellation.ThrowIfCancellationRequested(); + symbol.GlobalNamespace.Accept(this); + } + + public override void VisitNamespace(INamespaceSymbol symbol) + { + foreach (var namespaceOrType in symbol.GetMembers()) + { + cancellation.ThrowIfCancellationRequested(); + namespaceOrType.Accept(this); + } + } + + public override void VisitNamedType(INamedTypeSymbol type) + { + cancellation.ThrowIfCancellationRequested(); + + if (searchQuery(type)) + { + this._exportedTypes.Add(type); + } + } +} diff --git a/new-cli/GitVersion.Cli/GitVersion.Cli.csproj b/new-cli/GitVersion.Cli/GitVersion.Cli.csproj new file mode 100644 index 0000000000..cb8d1fadd6 --- /dev/null +++ b/new-cli/GitVersion.Cli/GitVersion.Cli.csproj @@ -0,0 +1,34 @@ + + + + Exe + gitversion + + + + dotnet-gitversion + GitVersion.Tool + Derives SemVer information from a repository following GitFlow or GitHubFlow. This is the .NET Core Global Tool allowing usage of GitVersion from command line. + + + + + + + + + + + + + + + + + + + + + + + diff --git a/new-cli/GitVersion.Cli/GitVersionApp.cs b/new-cli/GitVersion.Cli/GitVersionApp.cs new file mode 100644 index 0000000000..9a4d43fae9 --- /dev/null +++ b/new-cli/GitVersion.Cli/GitVersionApp.cs @@ -0,0 +1,41 @@ +using System.CommandLine; +using GitVersion.Extensions; +using GitVersion.Generated; +using GitVersion.Infrastructure; +using Serilog.Events; + +namespace GitVersion; + +internal class GitVersionApp(RootCommandImpl rootCommand) +{ + private readonly RootCommandImpl rootCommand = rootCommand.NotNull(); + + public Task RunAsync(string[] args, CancellationToken cancellationToken) + { + var cliConfiguration = new CliConfiguration(rootCommand); + var parseResult = cliConfiguration.Parse(args); + + var logFile = parseResult.GetValue(GitVersionSettings.LogFileOption); + var verbosity = parseResult.GetValue(GitVersionSettings.VerbosityOption) ?? Verbosity.Normal; + + if (logFile?.FullName != null) LoggingEnricher.Path = logFile.FullName; + LoggingEnricher.LogLevel.MinimumLevel = GetLevelForVerbosity(verbosity); + + return parseResult.InvokeAsync(cancellationToken); + } + + // Note: there are 2 locations to watch for dotnet-suggest + // - sentinel file: $env:TEMP\system-commandline-sentinel-files\ and + // - registration file: $env:LOCALAPPDATA\.dotnet-suggest-registration.txt or $HOME/.dotnet-suggest-registration.txt + + private static LogEventLevel GetLevelForVerbosity(Verbosity verbosity) => VerbosityMaps[verbosity]; + + private static readonly Dictionary VerbosityMaps = new() + { + { Verbosity.Verbose, LogEventLevel.Verbose }, + { Verbosity.Diagnostic, LogEventLevel.Debug }, + { Verbosity.Normal, LogEventLevel.Information }, + { Verbosity.Minimal, LogEventLevel.Warning }, + { Verbosity.Quiet, LogEventLevel.Error }, + }; +} diff --git a/new-cli/GitVersion.Cli/Program.cs b/new-cli/GitVersion.Cli/Program.cs new file mode 100644 index 0000000000..46cbdc1ad8 --- /dev/null +++ b/new-cli/GitVersion.Cli/Program.cs @@ -0,0 +1,34 @@ +using GitVersion; +using GitVersion.Extensions; +using GitVersion.Generated; +using GitVersion.Git; +using GitVersion.Infrastructure; + +var modules = new IGitVersionModule[] +{ + new CoreModule(), + new LibGit2SharpCoreModule(), + new CommandsImplModule() +}; + +var cts = new CancellationTokenSource(); +Console.CancelKeyPress += (_, _) => cts.Cancel(); + +using var serviceProvider = RegisterModules(modules); +var app = serviceProvider.GetRequiredService(); +var result = await app.RunAsync(args, cts.Token).ConfigureAwait(false); + +if (!Console.IsInputRedirected) Console.ReadKey(); + +return result; + +static IContainer RegisterModules(IEnumerable gitVersionModules) +{ + var serviceProvider = new ContainerRegistrar() + .RegisterModules(gitVersionModules) + .AddSingleton() + .AddLogging() + .Build(); + + return serviceProvider; +} diff --git a/new-cli/GitVersion.Common.Command/CommandAttribute.cs b/new-cli/GitVersion.Common.Command/CommandAttribute.cs new file mode 100644 index 0000000000..e00f116ba4 --- /dev/null +++ b/new-cli/GitVersion.Common.Command/CommandAttribute.cs @@ -0,0 +1,11 @@ +namespace GitVersion; + +[AttributeUsage(AttributeTargets.Class, Inherited = false)] +public class CommandAttribute(string name, string description = "") : Attribute +{ + public string Name { get; } = name; + public string Description { get; } = description; +} + +[AttributeUsage(AttributeTargets.Class, Inherited = false)] +public class CommandAttribute(string name, string description = "") : CommandAttribute(name, description); diff --git a/new-cli/GitVersion.Common.Command/GitVersion.Common.Command.csproj b/new-cli/GitVersion.Common.Command/GitVersion.Common.Command.csproj new file mode 100644 index 0000000000..9f1b9ee5f6 --- /dev/null +++ b/new-cli/GitVersion.Common.Command/GitVersion.Common.Command.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/new-cli/GitVersion.Common.Command/GitVersionSettings.cs b/new-cli/GitVersion.Common.Command/GitVersionSettings.cs new file mode 100644 index 0000000000..254532441b --- /dev/null +++ b/new-cli/GitVersion.Common.Command/GitVersionSettings.cs @@ -0,0 +1,18 @@ +using GitVersion.Infrastructure; + +namespace GitVersion; + +public record GitVersionSettings +{ + public const string LogFileOption = "--log-file"; + public const string VerbosityOption = "--verbosity"; + + [Option(LogFileOption, "The log file", "-l")] + public FileInfo? LogFile { get; init; } + + [Option(VerbosityOption, "The verbosity of the logging information")] + public Verbosity? Verbosity { get; init; } = GitVersion.Infrastructure.Verbosity.Normal; + + [Option("--work-dir", "The working directory with the git repository")] + public DirectoryInfo? WorkDir { get; init; } = new(Environment.CurrentDirectory); +} diff --git a/new-cli/GitVersion.Common.Command/ICommand.cs b/new-cli/GitVersion.Common.Command/ICommand.cs new file mode 100644 index 0000000000..9b630a7177 --- /dev/null +++ b/new-cli/GitVersion.Common.Command/ICommand.cs @@ -0,0 +1,12 @@ +namespace GitVersion; + +public interface ICommand +{ + public Task InvokeAsync(T settings, CancellationToken cancellationToken = default); +} + +public interface ICommandImpl +{ + string CommandName { get; } + string ParentCommandName { get; } +} diff --git a/new-cli/GitVersion.Common.Command/OptionAttribute.cs b/new-cli/GitVersion.Common.Command/OptionAttribute.cs new file mode 100644 index 0000000000..7122ccd4ad --- /dev/null +++ b/new-cli/GitVersion.Common.Command/OptionAttribute.cs @@ -0,0 +1,14 @@ +namespace GitVersion; + +[AttributeUsage(AttributeTargets.Property)] +public class OptionAttribute(string name, string description = "", params string[] aliases) : Attribute +{ + public string Name { get; } = name; + public string[] Aliases { get; } = aliases; + public string Description { get; } = description; + + public OptionAttribute(string name, string description = "") + : this(name, description, []) + { + } +} diff --git a/new-cli/GitVersion.Common/GitVersion.Common.csproj b/new-cli/GitVersion.Common/GitVersion.Common.csproj new file mode 100644 index 0000000000..f17ab3ec19 --- /dev/null +++ b/new-cli/GitVersion.Common/GitVersion.Common.csproj @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/new-cli/GitVersion.Common/IService.cs b/new-cli/GitVersion.Common/IService.cs new file mode 100644 index 0000000000..19a00ca2d8 --- /dev/null +++ b/new-cli/GitVersion.Common/IService.cs @@ -0,0 +1,6 @@ +namespace GitVersion; + +public interface IService +{ + int Call(); +} diff --git a/new-cli/GitVersion.Common/Infrastructure/IContainer.cs b/new-cli/GitVersion.Common/Infrastructure/IContainer.cs new file mode 100644 index 0000000000..3e26810630 --- /dev/null +++ b/new-cli/GitVersion.Common/Infrastructure/IContainer.cs @@ -0,0 +1,9 @@ +namespace GitVersion.Infrastructure; + +public interface IContainer : IDisposable +{ + T? GetService(); + T GetRequiredService() where T : notnull; + object? GetService(Type type); + object GetRequiredService(Type type); +} diff --git a/new-cli/GitVersion.Common/Infrastructure/IContainerRegistrar.cs b/new-cli/GitVersion.Common/Infrastructure/IContainerRegistrar.cs new file mode 100644 index 0000000000..cf11b727fe --- /dev/null +++ b/new-cli/GitVersion.Common/Infrastructure/IContainerRegistrar.cs @@ -0,0 +1,18 @@ +namespace GitVersion.Infrastructure; + +public interface IContainerRegistrar +{ + IContainerRegistrar AddSingleton() where TService : class; + + IContainerRegistrar AddSingleton() + where TService : class where TImplementation : class, TService; + + IContainerRegistrar AddTransient() where TService : class; + + IContainerRegistrar AddTransient() + where TService : class where TImplementation : class, TService; + + IContainerRegistrar AddLogging(); + + IContainer Build(); +} diff --git a/new-cli/GitVersion.Common/Infrastructure/IGitVersionModule.cs b/new-cli/GitVersion.Common/Infrastructure/IGitVersionModule.cs new file mode 100644 index 0000000000..7f8aa0addb --- /dev/null +++ b/new-cli/GitVersion.Common/Infrastructure/IGitVersionModule.cs @@ -0,0 +1,6 @@ +namespace GitVersion.Infrastructure; + +public interface IGitVersionModule +{ + void RegisterTypes(IContainerRegistrar services); +} diff --git a/new-cli/GitVersion.Common/Infrastructure/ILogger.cs b/new-cli/GitVersion.Common/Infrastructure/ILogger.cs new file mode 100644 index 0000000000..57df75da40 --- /dev/null +++ b/new-cli/GitVersion.Common/Infrastructure/ILogger.cs @@ -0,0 +1,11 @@ +namespace GitVersion.Infrastructure; + +public interface ILogger +{ + void LogTrace(string? message, params object?[] args); + void LogDebug(string? message, params object?[] args); + void LogInformation(string? message, params object?[] args); + void LogWarning(string? message, params object?[] args); + void LogError(string? message, params object?[] args); + void LogCritical(string? message, params object?[] args); +} diff --git a/new-cli/GitVersion.Common/Infrastructure/Verbosity.cs b/new-cli/GitVersion.Common/Infrastructure/Verbosity.cs new file mode 100644 index 0000000000..18ea6a2cfe --- /dev/null +++ b/new-cli/GitVersion.Common/Infrastructure/Verbosity.cs @@ -0,0 +1,32 @@ +namespace GitVersion.Infrastructure; + +/// +/// Represents verbosity. +/// +public enum Verbosity +{ + /// + /// Quiet verbosity. + /// + Quiet = 0, + + /// + /// Minimal verbosity. + /// + Minimal = 1, + + /// + /// Normal verbosity. + /// + Normal = 2, + + /// + /// Verbose verbosity. + /// + Verbose = 3, + + /// + /// Diagnostic verbosity. + /// + Diagnostic = 4 +} diff --git a/new-cli/GitVersion.Configuration/ConfigCommand.cs b/new-cli/GitVersion.Configuration/ConfigCommand.cs new file mode 100644 index 0000000000..7f3112f214 --- /dev/null +++ b/new-cli/GitVersion.Configuration/ConfigCommand.cs @@ -0,0 +1,20 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +public record ConfigSettings : GitVersionSettings; + +[Command("config", "Manages the GitVersion configuration file.")] +public class ConfigCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(ConfigSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'config', LogFile : '{settings.LogFile}', WorkDir : '{settings.WorkDir}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Configuration/GitVersion.Configuration.csproj b/new-cli/GitVersion.Configuration/GitVersion.Configuration.csproj new file mode 100644 index 0000000000..01f48f5e20 --- /dev/null +++ b/new-cli/GitVersion.Configuration/GitVersion.Configuration.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/new-cli/GitVersion.Configuration/Init/ConfigInitCommand.cs b/new-cli/GitVersion.Configuration/Init/ConfigInitCommand.cs new file mode 100644 index 0000000000..a636b36647 --- /dev/null +++ b/new-cli/GitVersion.Configuration/Init/ConfigInitCommand.cs @@ -0,0 +1,20 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +public record ConfigInitSettings : ConfigSettings; + +[Command("init", "Inits the configuration for current repository.")] +public class ConfigInitCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(ConfigInitSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'config init', LogFile : '{settings.LogFile}', WorkDir : '{settings.WorkDir}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Configuration/Show/ConfigShowCommand.cs b/new-cli/GitVersion.Configuration/Show/ConfigShowCommand.cs new file mode 100644 index 0000000000..585e7cfe59 --- /dev/null +++ b/new-cli/GitVersion.Configuration/Show/ConfigShowCommand.cs @@ -0,0 +1,20 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +public record ConfigShowSettings : ConfigSettings; + +[Command("show", "Shows the effective configuration.")] +public class ConfigShowCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(ConfigShowSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'config show', LogFile : '{settings.LogFile}', WorkDir : '{settings.WorkDir}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Core.Libgit2Sharp/Git/GitRepository.extended.cs b/new-cli/GitVersion.Core.Libgit2Sharp/Git/GitRepository.extended.cs new file mode 100644 index 0000000000..c7286ff0fb --- /dev/null +++ b/new-cli/GitVersion.Core.Libgit2Sharp/Git/GitRepository.extended.cs @@ -0,0 +1,3 @@ +namespace GitVersion.Git; + +internal sealed partial class GitRepository : IGitRepository; diff --git a/new-cli/GitVersion.Core.Libgit2Sharp/GitVersion.Core.Libgit2Sharp.csproj b/new-cli/GitVersion.Core.Libgit2Sharp/GitVersion.Core.Libgit2Sharp.csproj new file mode 100644 index 0000000000..20c3f4bedf --- /dev/null +++ b/new-cli/GitVersion.Core.Libgit2Sharp/GitVersion.Core.Libgit2Sharp.csproj @@ -0,0 +1,62 @@ + + + + + + + + + + + + + Git\Branch.cs + + + Git\BranchCollection.cs + + + Git\Commit.cs + + + Git\CommitCollection.cs + + + Git\GitObject.cs + + + Git\GitRepository.cs + + + Git\ObjectId.cs + + + Git\Reference.cs + + + Git\ReferenceCollection.cs + + + Git\RefSpec.cs + + + Git\RefSpecCollection.cs + + + Git\Remote.cs + + + Git\RemoteCollection.cs + + + Git\RepositoryExtensions.cs + + + Git\Tag.cs + + + Git\TagCollection.cs + + + + diff --git a/new-cli/GitVersion.Core.Libgit2Sharp/LibGit2SharpCoreModule.cs b/new-cli/GitVersion.Core.Libgit2Sharp/LibGit2SharpCoreModule.cs new file mode 100644 index 0000000000..bc06d9bd32 --- /dev/null +++ b/new-cli/GitVersion.Core.Libgit2Sharp/LibGit2SharpCoreModule.cs @@ -0,0 +1,8 @@ +using GitVersion.Infrastructure; + +namespace GitVersion.Git; + +public class LibGit2SharpCoreModule : IGitVersionModule +{ + public void RegisterTypes(IContainerRegistrar services) => services.AddSingleton(); +} diff --git a/new-cli/GitVersion.Core.Libgit2Sharp/LockedFileException.cs b/new-cli/GitVersion.Core.Libgit2Sharp/LockedFileException.cs new file mode 100644 index 0000000000..3cef30a364 --- /dev/null +++ b/new-cli/GitVersion.Core.Libgit2Sharp/LockedFileException.cs @@ -0,0 +1,20 @@ +namespace GitVersion; + +public class LockedFileException : Exception +{ + public LockedFileException(Exception inner) : base(inner.Message, inner) + { + } + + public LockedFileException() + { + } + + public LockedFileException(string? message) : base(message) + { + } + + public LockedFileException(string? message, Exception? innerException) : base(message, innerException) + { + } +} diff --git a/new-cli/GitVersion.Core.Tester/GitVersion.Core.Tester.csproj b/new-cli/GitVersion.Core.Tester/GitVersion.Core.Tester.csproj new file mode 100644 index 0000000000..cf6cd1370c --- /dev/null +++ b/new-cli/GitVersion.Core.Tester/GitVersion.Core.Tester.csproj @@ -0,0 +1,13 @@ + + + + Exe + gv + + + + + + + + diff --git a/new-cli/GitVersion.Core.Tester/GitVersionApp.cs b/new-cli/GitVersion.Core.Tester/GitVersionApp.cs new file mode 100644 index 0000000000..83e4a7a31a --- /dev/null +++ b/new-cli/GitVersion.Core.Tester/GitVersionApp.cs @@ -0,0 +1,26 @@ +using GitVersion.Git; +using GitVersion.Infrastructure; + +namespace GitVersion; + +public class GitVersionApp +{ + private readonly ILogger logger; + private readonly IGitRepository repository; + public GitVersionApp(ILogger logger, IGitRepository repository) + { + this.logger = logger; + this.repository = repository; + } + +#pragma warning disable IDE0060 + public Task RunAsync(string[] args) +#pragma warning restore IDE0060 + { + repository.DiscoverRepository(Directory.GetCurrentDirectory()); + var branches = repository.Branches.ToList(); + logger.LogInformation("Found {count} branches", branches.Count); + logger.LogInformation("Testing application for the GitVersion.Core without the command processing"); + return ValueTask.FromResult(0).AsTask(); + } +} diff --git a/new-cli/GitVersion.Core.Tester/Program.cs b/new-cli/GitVersion.Core.Tester/Program.cs new file mode 100644 index 0000000000..2325f7d0d2 --- /dev/null +++ b/new-cli/GitVersion.Core.Tester/Program.cs @@ -0,0 +1,29 @@ +using GitVersion; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Infrastructure; + +var assemblies = new IGitVersionModule[] +{ + new CoreModule(), + new LibGit2SharpCoreModule(), +}; + +using var serviceProvider = RegisterModules(assemblies); +var app = serviceProvider.GetRequiredService(); +var result = await app.RunAsync(args); + +if (!Console.IsInputRedirected) Console.ReadKey(); + +return result; + +static IContainer RegisterModules(IEnumerable gitVersionModules) +{ + var serviceProvider = new ContainerRegistrar() + .RegisterModules(gitVersionModules) + .AddSingleton() + .AddLogging() + .Build(); + + return serviceProvider; +} diff --git a/new-cli/GitVersion.Core/CoreModule.cs b/new-cli/GitVersion.Core/CoreModule.cs new file mode 100644 index 0000000000..4521f28dee --- /dev/null +++ b/new-cli/GitVersion.Core/CoreModule.cs @@ -0,0 +1,13 @@ +using GitVersion.Infrastructure; + +namespace GitVersion; + +public class CoreModule : IGitVersionModule +{ + public void RegisterTypes(IContainerRegistrar services) + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + } +} diff --git a/new-cli/GitVersion.Core/Extensions/ContainerRegistrarExtensions.cs b/new-cli/GitVersion.Core/Extensions/ContainerRegistrarExtensions.cs new file mode 100644 index 0000000000..c961b7f823 --- /dev/null +++ b/new-cli/GitVersion.Core/Extensions/ContainerRegistrarExtensions.cs @@ -0,0 +1,15 @@ +using GitVersion.Infrastructure; + +namespace GitVersion.Extensions; + +public static class ContainerRegistrarExtensions +{ + public static IContainerRegistrar RegisterModules(this IContainerRegistrar containerRegistrar, IEnumerable gitVersionModules) + => gitVersionModules.Aggregate(containerRegistrar, (current, gitVersionModule) => current.RegisterModule(gitVersionModule)); + + public static IContainerRegistrar RegisterModule(this IContainerRegistrar containerRegistrar, IGitVersionModule gitVersionModule) + { + gitVersionModule.RegisterTypes(containerRegistrar); + return containerRegistrar; + } +} diff --git a/new-cli/GitVersion.Core/GitVersion.Core.csproj b/new-cli/GitVersion.Core/GitVersion.Core.csproj new file mode 100644 index 0000000000..b96d2f9f1a --- /dev/null +++ b/new-cli/GitVersion.Core/GitVersion.Core.csproj @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + Infrastructure\Environment.cs + + + Infrastructure\FileSystem.cs + + + diff --git a/new-cli/GitVersion.Core/Infrastructure/Container.cs b/new-cli/GitVersion.Core/Infrastructure/Container.cs new file mode 100644 index 0000000000..efddeaf46e --- /dev/null +++ b/new-cli/GitVersion.Core/Infrastructure/Container.cs @@ -0,0 +1,30 @@ +using GitVersion.Extensions; +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.Infrastructure; + +public sealed class Container(ServiceProvider serviceProvider) : IContainer +{ + private readonly ServiceProvider serviceProvider = serviceProvider.NotNull(); + + public T? GetService() => serviceProvider.GetService(); + public T GetRequiredService() where T : notnull => serviceProvider.GetRequiredService(); + + public object GetService(Type type) => serviceProvider.GetRequiredService(type); + public object GetRequiredService(Type type) => serviceProvider.GetRequiredService(type); + + public void Dispose() + { + Dispose(true); + // ReSharper disable once GCSuppressFinalizeForTypeWithoutDestructor + GC.SuppressFinalize(this); // Violates rule + } + + private void Dispose(bool disposing) + { + if (disposing) + { + serviceProvider.Dispose(); + } + } +} diff --git a/new-cli/GitVersion.Core/Infrastructure/ContainerRegistrar.cs b/new-cli/GitVersion.Core/Infrastructure/ContainerRegistrar.cs new file mode 100644 index 0000000000..262f92a652 --- /dev/null +++ b/new-cli/GitVersion.Core/Infrastructure/ContainerRegistrar.cs @@ -0,0 +1,66 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Serilog; + +namespace GitVersion.Infrastructure; + +public sealed class ContainerRegistrar : IContainerRegistrar +{ + private readonly ServiceCollection services = []; + + public IContainerRegistrar AddSingleton() + where TService : class + where TImplementation : class, TService + { + services.AddSingleton(); + return this; + } + + public IContainerRegistrar AddSingleton() + where TService : class + => AddSingleton(); + + public IContainerRegistrar AddTransient() + where TService : class + where TImplementation : class, TService + { + services.AddTransient(); + return this; + } + + public IContainerRegistrar AddTransient() + where TService : class + => AddTransient(); + + public IContainerRegistrar AddLogging() + { + services.AddLogging(builder => + { + var logger = CreateLogger(); + builder.AddSerilog(logger, dispose: true); + }); + services.AddSingleton(provider => new Logger(provider.GetRequiredService>())); + return this; + } + + public IContainer Build() => new Container(services.BuildServiceProvider()); + + private static Serilog.Core.Logger CreateLogger() + { + var logger = new LoggerConfiguration() + // log level will be dynamically be controlled by our log interceptor upon running + .MinimumLevel.ControlledBy(LoggingEnricher.LogLevel) + // the log enricher will add a new property with the log file path from the settings + // that we can use to set the path dynamically + .Enrich.With() + // serilog.sinks.map will defer the configuration of the sink to be on demand + // allowing us to look at the properties set by the enricher to set the path appropriately + .WriteTo.Console() + .WriteTo.Map(LoggingEnricher.LogFilePathPropertyName, (logFilePath, wt) => + { + if (!string.IsNullOrEmpty(logFilePath)) wt.File(logFilePath); + }, 1) + .CreateLogger(); + return logger; + } +} diff --git a/new-cli/GitVersion.Core/Infrastructure/Logger.cs b/new-cli/GitVersion.Core/Infrastructure/Logger.cs new file mode 100644 index 0000000000..33b94d9909 --- /dev/null +++ b/new-cli/GitVersion.Core/Infrastructure/Logger.cs @@ -0,0 +1,16 @@ +using GitVersion.Extensions; +using Microsoft.Extensions.Logging; + +namespace GitVersion.Infrastructure; + +public sealed class Logger(Microsoft.Extensions.Logging.ILogger logger) : ILogger +{ + private readonly Microsoft.Extensions.Logging.ILogger logger = logger.NotNull(); + + public void LogTrace(string? message, params object?[] args) => logger.LogTrace(message, args); + public void LogDebug(string? message, params object?[] args) => logger.LogDebug(message, args); + public void LogInformation(string? message, params object?[] args) => logger.LogInformation(message, args); + public void LogWarning(string? message, params object?[] args) => logger.LogWarning(message, args); + public void LogError(string? message, params object?[] args) => logger.LogError(message, args); + public void LogCritical(string? message, params object?[] args) => logger.LogCritical(message, args); +} diff --git a/new-cli/GitVersion.Core/Infrastructure/LoggingEnricher.cs b/new-cli/GitVersion.Core/Infrastructure/LoggingEnricher.cs new file mode 100644 index 0000000000..453f59eaba --- /dev/null +++ b/new-cli/GitVersion.Core/Infrastructure/LoggingEnricher.cs @@ -0,0 +1,38 @@ +using Serilog.Core; +using Serilog.Events; + +namespace GitVersion.Infrastructure; + +public class LoggingEnricher : ILogEventEnricher +{ + public static readonly LoggingLevelSwitch LogLevel = new(); + private string? _cachedLogFilePath; + private LogEventProperty? _cachedLogFilePathProperty; + + // this path and level will be set by the LogInterceptor.cs after parsing the settings + public static string Path = string.Empty; + + public const string LogFilePathPropertyName = "LogFilePath"; + + public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) + { + // the settings might not have a path, or we might not be within a command in which case + // we won't have the setting so a default value for the log file will be required + LogEventProperty logFilePathProperty; + + if (this._cachedLogFilePathProperty != null && Path.Equals(this._cachedLogFilePath)) + { + // Path hasn't changed, so let's use the cached property + logFilePathProperty = this._cachedLogFilePathProperty; + } + else + { + // We've got a new path for the log. Let's create a new property + // and cache it for future log events to use + this._cachedLogFilePath = Path; + this._cachedLogFilePathProperty = logFilePathProperty = propertyFactory.CreateProperty(LogFilePathPropertyName, Path); + } + + logEvent.AddPropertyIfAbsent(logFilePathProperty); + } +} diff --git a/new-cli/GitVersion.Core/Service.cs b/new-cli/GitVersion.Core/Service.cs new file mode 100644 index 0000000000..4cbcecd974 --- /dev/null +++ b/new-cli/GitVersion.Core/Service.cs @@ -0,0 +1,6 @@ +namespace GitVersion; + +public class Service : IService +{ + public int Call() => 13; +} diff --git a/new-cli/GitVersion.Normalization/GitVersion.Normalization.csproj b/new-cli/GitVersion.Normalization/GitVersion.Normalization.csproj new file mode 100644 index 0000000000..01f48f5e20 --- /dev/null +++ b/new-cli/GitVersion.Normalization/GitVersion.Normalization.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/new-cli/GitVersion.Normalization/NormalizeCommand.cs b/new-cli/GitVersion.Normalization/NormalizeCommand.cs new file mode 100644 index 0000000000..3709700f25 --- /dev/null +++ b/new-cli/GitVersion.Normalization/NormalizeCommand.cs @@ -0,0 +1,20 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +public record NormalizeSettings : GitVersionSettings; + +[Command("normalize", "Normalizes the git repository for GitVersion calculations.")] +public class NormalizeCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(NormalizeSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'normalize', LogFile : '{settings.LogFile}', WorkDir : '{settings.WorkDir}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Output/AssemblyInfo/OutputAssemblyInfoCommand.cs b/new-cli/GitVersion.Output/AssemblyInfo/OutputAssemblyInfoCommand.cs new file mode 100644 index 0000000000..43e8187eb2 --- /dev/null +++ b/new-cli/GitVersion.Output/AssemblyInfo/OutputAssemblyInfoCommand.cs @@ -0,0 +1,20 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +[Command("assemblyinfo", "Outputs version to assembly")] +public class OutputAssemblyInfoCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(OutputAssemblyInfoSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + var versionInfo = settings.VersionInfo.Value; + logger.LogInformation($"Command : 'output assemblyinfo', LogFile : '{settings.LogFile}', WorkDir : '{settings.OutputDir}', InputFile: '{settings.InputFile}', AssemblyInfo: '{settings.AssemblyinfoFile}' "); + logger.LogInformation($"Version info: {versionInfo}"); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Output/AssemblyInfo/OutputAssemblyInfoSettings.cs b/new-cli/GitVersion.Output/AssemblyInfo/OutputAssemblyInfoSettings.cs new file mode 100644 index 0000000000..b1bf5a1fc9 --- /dev/null +++ b/new-cli/GitVersion.Output/AssemblyInfo/OutputAssemblyInfoSettings.cs @@ -0,0 +1,7 @@ +namespace GitVersion.Commands; + +public record OutputAssemblyInfoSettings : OutputSettings +{ + [Option("--assemblyinfo-file", "The assembly file")] + public required string AssemblyinfoFile { get; init; } +} diff --git a/new-cli/GitVersion.Output/GitVersion.Output.csproj b/new-cli/GitVersion.Output/GitVersion.Output.csproj new file mode 100644 index 0000000000..01f48f5e20 --- /dev/null +++ b/new-cli/GitVersion.Output/GitVersion.Output.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/new-cli/GitVersion.Output/OutputCommand.cs b/new-cli/GitVersion.Output/OutputCommand.cs new file mode 100644 index 0000000000..3e3f5796a3 --- /dev/null +++ b/new-cli/GitVersion.Output/OutputCommand.cs @@ -0,0 +1,18 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +[Command("output", "Outputs the version object.")] +public class OutputCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(OutputSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'output', LogFile : '{settings.LogFile}', WorkDir : '{settings.WorkDir}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Output/OutputSettings.cs b/new-cli/GitVersion.Output/OutputSettings.cs new file mode 100644 index 0000000000..6b79fd728f --- /dev/null +++ b/new-cli/GitVersion.Output/OutputSettings.cs @@ -0,0 +1,12 @@ +namespace GitVersion.Commands; + +public record OutputSettings : GitVersionSettings +{ + public Lazy VersionInfo { get; } = new(() => Console.IsInputRedirected ? Console.ReadLine() ?? string.Empty : string.Empty); + + [Option("--input-file", "The input version file")] + public required FileInfo InputFile { get; init; } + + [Option("--output-dir", "The output directory with the git repository")] + public required DirectoryInfo OutputDir { get; init; } +} diff --git a/new-cli/GitVersion.Output/Project/OutputProjectCommand.cs b/new-cli/GitVersion.Output/Project/OutputProjectCommand.cs new file mode 100644 index 0000000000..d02df30d89 --- /dev/null +++ b/new-cli/GitVersion.Output/Project/OutputProjectCommand.cs @@ -0,0 +1,18 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +[Command("project", "Outputs version to project")] +public class OutputProjectCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(OutputProjectSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'output project', LogFile : '{settings.LogFile}', WorkDir : '{settings.OutputDir}', InputFile: '{settings.InputFile}', Project: '{settings.ProjectFile}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Output/Project/OutputProjectSettings.cs b/new-cli/GitVersion.Output/Project/OutputProjectSettings.cs new file mode 100644 index 0000000000..ec096cd7a7 --- /dev/null +++ b/new-cli/GitVersion.Output/Project/OutputProjectSettings.cs @@ -0,0 +1,7 @@ +namespace GitVersion.Commands; + +public record OutputProjectSettings : OutputSettings +{ + [Option("--project-file", "The project file")] + public required string ProjectFile { get; init; } +} diff --git a/new-cli/GitVersion.Output/Wix/OutputWixCommand.cs b/new-cli/GitVersion.Output/Wix/OutputWixCommand.cs new file mode 100644 index 0000000000..179b7fc489 --- /dev/null +++ b/new-cli/GitVersion.Output/Wix/OutputWixCommand.cs @@ -0,0 +1,18 @@ +using GitVersion.Extensions; +using GitVersion.Infrastructure; + +namespace GitVersion.Commands; + +[Command("wix", "Outputs version to wix file")] +public class OutputWixCommand(ILogger logger, IService service) : ICommand +{ + private readonly ILogger logger = logger.NotNull(); + private readonly IService service = service.NotNull(); + + public Task InvokeAsync(OutputWixSettings settings, CancellationToken cancellationToken = default) + { + var value = service.Call(); + logger.LogInformation($"Command : 'output wix', LogFile : '{settings.LogFile}', WorkDir : '{settings.OutputDir}', InputFile: '{settings.InputFile}', WixFile: '{settings.WixFile}' "); + return Task.FromResult(value); + } +} diff --git a/new-cli/GitVersion.Output/Wix/OutputWixSettings.cs b/new-cli/GitVersion.Output/Wix/OutputWixSettings.cs new file mode 100644 index 0000000000..745f44759d --- /dev/null +++ b/new-cli/GitVersion.Output/Wix/OutputWixSettings.cs @@ -0,0 +1,7 @@ +namespace GitVersion.Commands; + +public record OutputWixSettings : OutputSettings +{ + [Option("--wix-file", "The wix file")] + public required string WixFile { get; init; } +} diff --git a/new-cli/GitVersion.sln b/new-cli/GitVersion.sln new file mode 100644 index 0000000000..a0e85b1fb5 --- /dev/null +++ b/new-cli/GitVersion.sln @@ -0,0 +1,112 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Cli", "GitVersion.Cli\GitVersion.Cli.csproj", "{E2520F2D-A6FF-4079-85A4-584AA0CC8594}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Common", "GitVersion.Common\GitVersion.Common.csproj", "{02332393-1F38-4819-8D6F-3D1968B38919}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Calculation", "GitVersion.Calculation\GitVersion.Calculation.csproj", "{8F6D4830-B870-4365-9662-457F1A13894B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Output", "GitVersion.Output\GitVersion.Output.csproj", "{9543A475-06BA-4C8D-A3CE-E2792FE663DA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sln", "sln", "{610883EF-A96B-4A86-8A3F-1F1601FFDC7D}" +ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props + nuget.config = nuget.config +EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Normalization", "GitVersion.Normalization\GitVersion.Normalization.csproj", "{45776CC1-7FDA-4299-86A7-9F11E7855CE4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Configuration", "GitVersion.Configuration\GitVersion.Configuration.csproj", "{2127F18A-F52B-4024-A0FD-B4D9F75FD85F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Plugins", "Plugins", "{511CE16D-A65E-48F4-9A95-BB521A9048AF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Core", "GitVersion.Core\GitVersion.Core.csproj", "{2167C815-3A7E-4758-9F45-03EFE1E8EB1F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Common.Command", "GitVersion.Common.Command\GitVersion.Common.Command.csproj", "{CB8166C6-2621-4B65-BEB4-4485F27B2368}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cmds", "cmds", "{ABF3B56F-CF60-418F-A729-05388BD064B7}" + ProjectSection(SolutionItems) = preProject + docs\calculate.rsp = docs\calculate.rsp + docs\config-help.rsp = docs\config-help.rsp + docs\config-init.rsp = docs\config-init.rsp + docs\config-show.rsp = docs\config-show.rsp + docs\help.rsp = docs\help.rsp + docs\normalize.rsp = docs\normalize.rsp + docs\output-assemblyinfo.rsp = docs\output-assemblyinfo.rsp + docs\output-help.rsp = docs\output-help.rsp + docs\output-project.rsp = docs\output-project.rsp + docs\output-wix.rsp = docs\output-wix.rsp + docs\version.rsp = docs\version.rsp + command.md = command.md + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Core.Tester", "GitVersion.Core.Tester\GitVersion.Core.Tester.csproj", "{DE951A86-1B65-4C7B-B6BE-7B5A233D7AF1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Core.Libgit2Sharp", "GitVersion.Core.Libgit2Sharp\GitVersion.Core.Libgit2Sharp.csproj", "{69E72521-9B30-48CD-A674-BC26A25A0906}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitVersion.Cli.Generator", "GitVersion.Cli.Generator\GitVersion.Cli.Generator.csproj", "{AF22F642-625A-4A33-92A5-161EE4E2B0CE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "root", "root", "{D27CECCB-F012-433C-B026-84979C8C731E}" + ProjectSection(SolutionItems) = preProject + ..\global.json = ..\global.json + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E2520F2D-A6FF-4079-85A4-584AA0CC8594}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2520F2D-A6FF-4079-85A4-584AA0CC8594}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2520F2D-A6FF-4079-85A4-584AA0CC8594}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2520F2D-A6FF-4079-85A4-584AA0CC8594}.Release|Any CPU.Build.0 = Release|Any CPU + {02332393-1F38-4819-8D6F-3D1968B38919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02332393-1F38-4819-8D6F-3D1968B38919}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02332393-1F38-4819-8D6F-3D1968B38919}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02332393-1F38-4819-8D6F-3D1968B38919}.Release|Any CPU.Build.0 = Release|Any CPU + {8F6D4830-B870-4365-9662-457F1A13894B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8F6D4830-B870-4365-9662-457F1A13894B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8F6D4830-B870-4365-9662-457F1A13894B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8F6D4830-B870-4365-9662-457F1A13894B}.Release|Any CPU.Build.0 = Release|Any CPU + {9543A475-06BA-4C8D-A3CE-E2792FE663DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9543A475-06BA-4C8D-A3CE-E2792FE663DA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9543A475-06BA-4C8D-A3CE-E2792FE663DA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9543A475-06BA-4C8D-A3CE-E2792FE663DA}.Release|Any CPU.Build.0 = Release|Any CPU + {45776CC1-7FDA-4299-86A7-9F11E7855CE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45776CC1-7FDA-4299-86A7-9F11E7855CE4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45776CC1-7FDA-4299-86A7-9F11E7855CE4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45776CC1-7FDA-4299-86A7-9F11E7855CE4}.Release|Any CPU.Build.0 = Release|Any CPU + {2127F18A-F52B-4024-A0FD-B4D9F75FD85F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2127F18A-F52B-4024-A0FD-B4D9F75FD85F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2127F18A-F52B-4024-A0FD-B4D9F75FD85F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2127F18A-F52B-4024-A0FD-B4D9F75FD85F}.Release|Any CPU.Build.0 = Release|Any CPU + {2167C815-3A7E-4758-9F45-03EFE1E8EB1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2167C815-3A7E-4758-9F45-03EFE1E8EB1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2167C815-3A7E-4758-9F45-03EFE1E8EB1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2167C815-3A7E-4758-9F45-03EFE1E8EB1F}.Release|Any CPU.Build.0 = Release|Any CPU + {CB8166C6-2621-4B65-BEB4-4485F27B2368}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB8166C6-2621-4B65-BEB4-4485F27B2368}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB8166C6-2621-4B65-BEB4-4485F27B2368}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB8166C6-2621-4B65-BEB4-4485F27B2368}.Release|Any CPU.Build.0 = Release|Any CPU + {DE951A86-1B65-4C7B-B6BE-7B5A233D7AF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE951A86-1B65-4C7B-B6BE-7B5A233D7AF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE951A86-1B65-4C7B-B6BE-7B5A233D7AF1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE951A86-1B65-4C7B-B6BE-7B5A233D7AF1}.Release|Any CPU.Build.0 = Release|Any CPU + {69E72521-9B30-48CD-A674-BC26A25A0906}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69E72521-9B30-48CD-A674-BC26A25A0906}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69E72521-9B30-48CD-A674-BC26A25A0906}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69E72521-9B30-48CD-A674-BC26A25A0906}.Release|Any CPU.Build.0 = Release|Any CPU + {AF22F642-625A-4A33-92A5-161EE4E2B0CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF22F642-625A-4A33-92A5-161EE4E2B0CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF22F642-625A-4A33-92A5-161EE4E2B0CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF22F642-625A-4A33-92A5-161EE4E2B0CE}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {8F6D4830-B870-4365-9662-457F1A13894B} = {511CE16D-A65E-48F4-9A95-BB521A9048AF} + {2127F18A-F52B-4024-A0FD-B4D9F75FD85F} = {511CE16D-A65E-48F4-9A95-BB521A9048AF} + {45776CC1-7FDA-4299-86A7-9F11E7855CE4} = {511CE16D-A65E-48F4-9A95-BB521A9048AF} + {9543A475-06BA-4C8D-A3CE-E2792FE663DA} = {511CE16D-A65E-48F4-9A95-BB521A9048AF} + EndGlobalSection +EndGlobal diff --git a/src/GitVersion.Core/GitVersion.Core.csproj.DotSettings b/new-cli/GitVersion.sln.DotSettings similarity index 65% rename from src/GitVersion.Core/GitVersion.Core.csproj.DotSettings rename to new-cli/GitVersion.sln.DotSettings index 77449f83fe..8b5bc393ec 100644 --- a/src/GitVersion.Core/GitVersion.Core.csproj.DotSettings +++ b/new-cli/GitVersion.sln.DotSettings @@ -1,2 +1,2 @@  - True \ No newline at end of file + True \ No newline at end of file diff --git a/new-cli/command.md b/new-cli/command.md new file mode 100644 index 0000000000..c137381b07 --- /dev/null +++ b/new-cli/command.md @@ -0,0 +1,72 @@ +```sh +# Write version to stdout +gitversion --version + +# Write help to stdout +gitversion --help + +# Normalize the repository to its required state: +gitversion normalize + +# Normalize the repository inside `./project/` to its required state: +gitversion normalize --work-dir ./project/ + +# Initialize GitVersion.yml +gitversion config init + +# Write the effective GitVersion configuration (defaults + custom from GitVersion.yml) in yaml format to stdout +gitversion config show + +# Calculate the version number and output to stdout. Only the JSON with the version variables will go to stdout, errors and warnings will be logged to stderr +gitversion calculate + +# Calculate the version number and write it gitversion.json +gitversion calculate > gitversion.json + +# Calculate the version number and output to stdout. Include logging information depending on the verbosity level in the logging to stderr. +gitversion calculate --verbosity verbose + +# Calculate the version number and output to stdout. Include diagnostics info in the logging to stderr (requires `git` executable on PATH). +gitversion [diag] calculate + +# Calculate the version number and log to the file `/var/logs/gitversion.log` +gitversion calculate --logfile /var/logs/gitversion.log + +# Calculate the version number based on the configuration file `/etc/gitversion.yml` +gitversion calculate --configfile /etc/gitversion.yml + +# Calculate the version and override the `tag-prefix` configuration. +gitversion calculate --override-config tag-prefix=foo + +# Calculate the version with caching disabled. +gitversion calculate --no-cache + +# Read version variables from stdin and write to globbed AssemblyInfo.cs files +cat gitversion.json | gitversion output assemblyinfo --path ./**/AssemblyInfo.cs + +# Read version variables from stdin and write to globbed .csproj files +cat gitversion.json | gitversion output projectfiles --path ./**/*.csproj + +# Read version variables from stdin and write to an auto-detected build server. Without an `--in` argument, stdin is the default input. +cat gitversion.json | gitversion output buildserver + +# Read version variables from stdin and write to Jenkins. +cat gitversion.json | gitversion output buildserver --buildserver Jenkins + +# Read version variables from stdin and write to globbed .wxi files. +cat gitversion.json | gitversion output wix --path ./**/*.wxi + +# Read version variables from stdin and output them to environment variables +cat gitversion.json | gitversion output environment + +# Read version variables from stdin and output them to environment variables +cat gitversion.json | gitversion output environment --property FullSemVer + +# Read version variables from stdin and output only the `FullSemVer` property to stdout. +cat gitversion.json | gitversion output --property FullSemVer + +# Pipe the output of calculate to gitversion output +gitversion calculate | gitversion output assemblyinfo --path ./**/AssemblyInfo.cs + +#NOTES [diag] can be used only with calculate command +``` diff --git a/new-cli/docs/calculate.rsp b/new-cli/docs/calculate.rsp new file mode 100644 index 0000000000..7e0362931d --- /dev/null +++ b/new-cli/docs/calculate.rsp @@ -0,0 +1 @@ +calculate -l c:\logs\log.txt --work-dir C:\Projects\OSS\GitTools\GitVersion --verbosity verbose diff --git a/new-cli/docs/config-help.rsp b/new-cli/docs/config-help.rsp new file mode 100644 index 0000000000..e3f8dfac56 --- /dev/null +++ b/new-cli/docs/config-help.rsp @@ -0,0 +1 @@ +config --help diff --git a/new-cli/docs/config-init.rsp b/new-cli/docs/config-init.rsp new file mode 100644 index 0000000000..3219c72c12 --- /dev/null +++ b/new-cli/docs/config-init.rsp @@ -0,0 +1 @@ +config init diff --git a/new-cli/docs/config-show.rsp b/new-cli/docs/config-show.rsp new file mode 100644 index 0000000000..3971d07a4b --- /dev/null +++ b/new-cli/docs/config-show.rsp @@ -0,0 +1 @@ +config show diff --git a/new-cli/docs/help.rsp b/new-cli/docs/help.rsp new file mode 100644 index 0000000000..2255a80a73 --- /dev/null +++ b/new-cli/docs/help.rsp @@ -0,0 +1 @@ +--help diff --git a/new-cli/docs/normalize.rsp b/new-cli/docs/normalize.rsp new file mode 100644 index 0000000000..f9a8b6aa16 --- /dev/null +++ b/new-cli/docs/normalize.rsp @@ -0,0 +1 @@ +normalize diff --git a/new-cli/docs/output-assemblyinfo.rsp b/new-cli/docs/output-assemblyinfo.rsp new file mode 100644 index 0000000000..d632da45c7 --- /dev/null +++ b/new-cli/docs/output-assemblyinfo.rsp @@ -0,0 +1 @@ +output assemblyinfo --input-file version.json --assemblyinfo-file assembly.cs diff --git a/new-cli/docs/output-help.rsp b/new-cli/docs/output-help.rsp new file mode 100644 index 0000000000..c0cbbfae24 --- /dev/null +++ b/new-cli/docs/output-help.rsp @@ -0,0 +1 @@ +output --help diff --git a/new-cli/docs/output-project.rsp b/new-cli/docs/output-project.rsp new file mode 100644 index 0000000000..8619d5df10 --- /dev/null +++ b/new-cli/docs/output-project.rsp @@ -0,0 +1 @@ +output --output-dir C:\Projects\OSS\GitTools\GitVersion --input-file version.json project --project-file project.csproj diff --git a/new-cli/docs/output-wix.rsp b/new-cli/docs/output-wix.rsp new file mode 100644 index 0000000000..25f543d648 --- /dev/null +++ b/new-cli/docs/output-wix.rsp @@ -0,0 +1 @@ +output --output-dir C:\Projects\OSS\GitTools\GitVersion --input-file version.json wix --wix-file project.wix diff --git a/new-cli/docs/version.rsp b/new-cli/docs/version.rsp new file mode 100644 index 0000000000..32776d21bd --- /dev/null +++ b/new-cli/docs/version.rsp @@ -0,0 +1 @@ +--version diff --git a/new-cli/nuget.config b/new-cli/nuget.config new file mode 100644 index 0000000000..f9c9855a53 --- /dev/null +++ b/new-cli/nuget.config @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/package-lock.json b/package-lock.json index ece3dcb744..50589ade20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,105 +7,177 @@ "name": "gitversion", "license": "MIT", "devDependencies": { - "remark": "^14.0.2", - "remark-cli": "^10.0.1", - "remark-frontmatter": "^4.0.1", - "remark-heading-gap": "^5.0.1", - "remark-lint": "^9.1.1", - "remark-lint-blockquote-indentation": "^3.1.1", - "remark-lint-checkbox-character-style": "^4.1.1", - "remark-lint-checkbox-content-indent": "^4.1.1", + "remark": "^15.0.1", + "remark-cli": "^12.0.1", + "remark-frontmatter": "^5.0.0", + "remark-heading-gap": "^6.0.0", + "remark-lint": "^10.0.0", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-checkbox-character-style": "^5.0.0", + "remark-lint-checkbox-content-indent": "^5.0.0", "remark-lint-code": "^2.0.0", - "remark-lint-code-block-style": "^3.1.0", - "remark-lint-definition-case": "^3.1.1", - "remark-lint-definition-spacing": "^3.1.1", - "remark-lint-fenced-code-flag": "^3.1.1", - "remark-lint-fenced-code-marker": "^3.1.1", - "remark-lint-file-extension": "^2.1.1", - "remark-lint-final-definition": "^3.1.1", - "remark-lint-final-newline": "^2.1.1", - "remark-lint-hard-break-spaces": "^3.1.1", - "remark-lint-heading-increment": "^3.1.1", - "remark-lint-heading-style": "^3.1.1", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-definition-case": "^4.0.0", + "remark-lint-definition-spacing": "^4.0.0", + "remark-lint-fenced-code-flag": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-file-extension": "^3.0.0", + "remark-lint-final-definition": "^4.0.1", + "remark-lint-final-newline": "^3.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-heading-increment": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", "remark-lint-heading-whitespace": "^1.0.0", - "remark-lint-link-title-style": "^3.1.1", - "remark-lint-list-item-bullet-indent": "^4.1.1", - "remark-lint-list-item-content-indent": "^3.1.1", - "remark-lint-list-item-indent": "^3.1.1", - "remark-lint-maximum-heading-length": "^3.1.1", - "remark-lint-no-auto-link-without-protocol": "^3.1.1", - "remark-lint-no-blockquote-without-marker": "^5.1.1", - "remark-lint-no-consecutive-blank-lines": "^4.1.2", + "remark-lint-link-title-style": "^4.0.0", + "remark-lint-list-item-bullet-indent": "^5.0.0", + "remark-lint-list-item-content-indent": "^4.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-maximum-heading-length": "^4.0.0", + "remark-lint-no-auto-link-without-protocol": "^3.1.2", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-consecutive-blank-lines": "^5.0.0", "remark-lint-no-dead-urls": "^1.1.0", - "remark-lint-no-duplicate-definitions": "^3.1.1", - "remark-lint-no-duplicate-headings": "^3.1.1", - "remark-lint-no-emphasis-as-heading": "^3.1.1", + "remark-lint-no-duplicate-definitions": "^4.0.0", + "remark-lint-no-duplicate-headings": "^4.0.0", + "remark-lint-no-emphasis-as-heading": "^4.0.0", "remark-lint-no-empty-sections": "^4.0.0", - "remark-lint-no-empty-url": "^3.1.1", - "remark-lint-no-file-name-articles": "^2.1.1", - "remark-lint-no-file-name-consecutive-dashes": "^2.1.1", - "remark-lint-no-file-name-irregular-characters": "^2.1.1", - "remark-lint-no-file-name-mixed-case": "^2.1.1", - "remark-lint-no-file-name-outer-dashes": "^2.1.1", - "remark-lint-no-heading-content-indent": "^4.1.1", - "remark-lint-no-heading-indent": "^4.1.1", - "remark-lint-no-heading-like-paragraph": "^3.1.1", - "remark-lint-no-inline-padding": "^4.1.1", - "remark-lint-no-literal-urls": "^3.1.1", - "remark-lint-no-multiple-toplevel-headings": "^3.1.1", - "remark-lint-no-reference-like-url": "^3.1.1", + "remark-lint-no-empty-url": "^4.0.0", + "remark-lint-no-file-name-articles": "^3.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^3.0.0", + "remark-lint-no-file-name-irregular-characters": "^3.0.0", + "remark-lint-no-file-name-mixed-case": "^3.0.0", + "remark-lint-no-file-name-outer-dashes": "^3.0.0", + "remark-lint-no-heading-content-indent": "^5.0.0", + "remark-lint-no-heading-indent": "^5.0.0", + "remark-lint-no-heading-like-paragraph": "^4.0.0", + "remark-lint-no-inline-padding": "^4.1.2", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-multiple-toplevel-headings": "^4.0.0", + "remark-lint-no-reference-like-url": "^4.0.0", "remark-lint-no-repeat-punctuation": "^0.1.4", - "remark-lint-no-shell-dollars": "^3.1.1", - "remark-lint-no-shortcut-reference-image": "^3.1.1", - "remark-lint-no-table-indentation": "^4.1.1", - "remark-lint-no-tabs": "^3.1.1", - "remark-lint-no-unused-definitions": "^3.1.1", - "remark-lint-ordered-list-marker-style": "^3.1.1", - "remark-lint-ordered-list-marker-value": "^3.1.1", - "remark-lint-rule-style": "^3.1.1", - "remark-lint-strong-marker": "^3.1.1", - "remark-lint-table-cell-padding": "^4.1.2", - "remark-lint-table-pipe-alignment": "^3.1.1", - "remark-lint-table-pipes": "^4.1.1", - "remark-lint-unordered-list-marker-style": "^3.1.1", + "remark-lint-no-shell-dollars": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-table-indentation": "^5.0.0", + "remark-lint-no-tabs": "^4.0.0", + "remark-lint-no-unused-definitions": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "remark-lint-table-pipe-alignment": "^4.0.0", + "remark-lint-table-pipes": "^5.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-lint-write-good": "^1.2.0", - "remark-preset-lint-consistent": "^5.1.1", - "remark-preset-lint-markdown-style-guide": "^5.1.2", - "remark-preset-lint-recommended": "^6.1.2", - "remark-retext": "^5.0.1", - "remark-textr": "^5.0.1", - "remark-validate-links": "^11.0.2" + "remark-preset-lint-consistent": "^6.0.0", + "remark-preset-lint-markdown-style-guide": "^6.0.0", + "remark-preset-lint-recommended": "^7.0.0", + "remark-retext": "^6.0.0", + "remark-textr": "^6.1.0", + "remark-validate-links": "^13.0.1" } }, "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dev": true, "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -150,13 +222,13 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { "node": ">=0.8.0" @@ -165,7 +237,7 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -263,37 +335,176 @@ "dev": true, "peer": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==", "dev": true }, + "node_modules/@npmcli/config": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-4.1.0.tgz", + "integrity": "sha512-cPQmIQ2Q0vuOfrenrA3isikdMFMAHgzlXV+EmvZ8f2JeJsU5xTU2bG7ipXECiMvPF9nM+QDnMLuIg8QLw9H4xg==", + "dev": true, + "dependencies": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/map-workspaces": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", + "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "dev": true, + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, "dependencies": { - "defer-to-connect": "^1.0.1" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" } }, "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==", "dev": true, "dependencies": { "@types/node": "*" @@ -309,30 +520,51 @@ } }, "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/estree-jsx": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", - "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "dev": true, "dependencies": { "@types/estree": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.1.tgz", + "integrity": "sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/hosted-git-info": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hosted-git-info/-/hosted-git-info-3.0.5.tgz", + "integrity": "sha512-Dmngh7U003cOHPhKGyA7LWqrnvcTyILNgNPmNCxlx7j8MIi54iBliiT8XqVLIQ3GchoOjVAyBzNJVyuaJjqokg==", + "dev": true + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, "node_modules/@types/is-empty": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.1.tgz", "integrity": "sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==", "dev": true }, - "node_modules/@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", + "node_modules/@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", "dev": true }, "node_modules/@types/json5": { @@ -342,6 +574,15 @@ "dev": true, "peer": true }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mdast": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", @@ -358,20 +599,29 @@ "dev": true }, "node_modules/@types/nlcst": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.0.tgz", - "integrity": "sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.1.tgz", + "integrity": "sha512-+hL97wfmdLW/unulVgdR+e+8PXbbtZgoYOq3C12H3RKgAZZ38D55Jwej7JBttJ6+oFuwIRYy5qTbE/WugMsCxw==", "dev": true, "dependencies": { "@types/unist": "*" } }, "node_modules/@types/node": { - "version": "17.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", - "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", + "version": "20.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.0.tgz", + "integrity": "sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==", "dev": true }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", @@ -379,9 +629,9 @@ "dev": true }, "node_modules/@types/text-table": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", - "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.3.tgz", + "integrity": "sha512-MUW7DN7e178wJ2dB9rHuhwUWRUJGrl8fCng37BEWV0r2r5VpzkRFRiMfnX6sjXlu4tMn41lrjzsVh/z1XrKc+A==", "dev": true }, "node_modules/@types/unist": { @@ -390,6 +640,18 @@ "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -491,9 +753,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -507,7 +769,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/aria-query": { "version": "4.2.2", @@ -543,6 +806,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/array.prototype.flat": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", @@ -633,6 +906,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -657,52 +931,37 @@ "dev": true }, "node_modules/builtins": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", - "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "dependencies": { "semver": "^7.0.0" } }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", + "keyv": "^4.0.0", "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { "node": ">=8" } @@ -731,16 +990,14 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "dev": true, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chalk": { @@ -748,6 +1005,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -769,6 +1027,36 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-links": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/check-links/-/check-links-1.1.8.tgz", @@ -785,11 +1073,17 @@ } }, "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, - "dependencies": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", @@ -805,6 +1099,15 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -815,12 +1118,15 @@ } }, "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, "dependencies": { "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/co": { @@ -829,6 +1135,16 @@ "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", "dev": true }, + "node_modules/collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -847,17 +1163,41 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "dependencies": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "dev": true, + "peer": true }, "node_modules/concat-stream": { "version": "2.0.0", @@ -891,7 +1231,6 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -939,15 +1278,30 @@ } }, "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, "dependencies": { - "mimic-response": "^1.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/deep-is": { @@ -958,10 +1312,13 @@ "peer": true }, "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/define-properties": { "version": "1.1.3", @@ -985,19 +1342,23 @@ "node": ">=6" } }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, - "engines": { - "node": ">=0.3.1" + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -1031,12 +1392,6 @@ "node": ">=6.0.0" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "node_modules/e-prime": { "version": "0.10.4", "resolved": "https://registry.npmjs.org/e-prime/-/e-prime-0.10.4.tgz", @@ -1680,12 +2035,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1711,18 +2060,6 @@ "node": ">=8" } }, - "node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", @@ -1744,6 +2081,22 @@ "dev": true, "peer": true }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -1760,9 +2113,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -1803,15 +2156,18 @@ } }, "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { "pump": "^3.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/get-symbol-description": { @@ -1832,9 +2188,9 @@ } }, "node_modules/github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", "dev": true }, "node_modules/glob": { @@ -1842,6 +2198,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1899,25 +2256,28 @@ } }, "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, "node_modules/has": { @@ -1948,6 +2308,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -1982,23 +2343,45 @@ } }, "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^10.0.1" }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true, + "engines": { + "node": "14 || >=16.14" } }, "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "dev": true }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -2026,12 +2409,12 @@ } }, "node_modules/import-meta-resolve": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz", - "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.0.3.tgz", + "integrity": "sha512-fpAppnBpZ3ymQ/dPP97TNsco1HB5+V9SYJ3chY50PP8xn4U/w+Y6ovWBmTImB/prmGsTjzPh8pQYY+EVBlr9mw==", "dev": true, "dependencies": { - "builtins": "^4.0.0" + "builtins": "^5.0.0" }, "funding": { "type": "github", @@ -2057,6 +2440,12 @@ "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2074,10 +2463,13 @@ "dev": true }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, "node_modules/internal-slot": { "version": "1.0.3", @@ -2112,10 +2504,34 @@ "node": ">=0.10.0" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "node_modules/is-bigint": { @@ -2225,6 +2641,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-empty": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", @@ -2240,6 +2666,15 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2252,6 +2687,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-ip": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", @@ -2420,8 +2865,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, - "peer": true + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } }, "node_modules/js-tokens": { "version": "4.0.0", @@ -2434,6 +2896,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -2442,9 +2905,9 @@ } }, "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, "node_modules/json-parse-even-better-errors": { @@ -2468,13 +2931,10 @@ "peer": true }, "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, "bin": { "json5": "lib/cli.js" }, @@ -2497,21 +2957,13 @@ } }, "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.4.1.tgz", + "integrity": "sha512-PzByhNxfBLnSBW2MZi1DF+W5+qB/7BMpOokewqIvqS8GFtP7xHm2oeGU72Y1fhtfOv/FiEnI4+nyViYDmUChnw==", "dev": true, "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true, - "engines": { - "node": ">=6" + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" } }, "node_modules/language-subtag-registry": { @@ -2554,17 +3006,6 @@ "node": ">= 0.8.0" } }, - "node_modules/libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" - } - }, "node_modules/lines-and-columns": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", @@ -2575,32 +3016,19 @@ } }, "node_modules/load-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-4.0.1.tgz", - "integrity": "sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.0.0.tgz", + "integrity": "sha512-jTz8tvC0BTMtof27lTSV5SAOnCRT0Z++k+S3QeQ5CrF8ZAS5L2nhi3euf4ZhJyDkds+nOQGyPcFqdQZ9s8ELkg==", "dev": true, "dependencies": { - "import-meta-resolve": "^1.0.0", - "libnpmconfig": "^1.0.0" + "@npmcli/config": "^4.0.0", + "import-meta-resolve": "^2.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2632,12 +3060,12 @@ } }, "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/lru-cache": { @@ -2664,7933 +3092,24152 @@ "node": ">=6" } }, - "node_modules/mdast-comment-marker": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.0.tgz", - "integrity": "sha512-/+Cfm8A83PjkqjQDB9iYqHESGuXlriCWAwRGPJjkYmxXrF4r6saxeUlOKNrf+SogTwg9E8uyHRCFHLG6/BAAdA==", + "node_modules/markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "dev": true, - "dependencies": { - "mdast-util-mdx-expression": "^1.1.0" + "engines": { + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "node_modules/mdast-comment-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz", + "integrity": "sha512-bt08sLmTNg00/UtVDiqZKocxqvQqqyQZAg1uaRuO/4ysXV5motg7RolF5o5yy/sY1rG0v2XgZEqFWho1+2UquA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "mdast-util-mdx-expression": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.0.tgz", - "integrity": "sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw==", + "node_modules/mdast-comment-marker/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "micromark-extension-frontmatter": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/unist": "*" } }, - "node_modules/mdast-util-heading-style": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", - "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", + "node_modules/mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx-expression": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.1.1.tgz", - "integrity": "sha512-RDLRkBFmBKCJl6/fQdxxKL2BqNtoPFoNBmQAlj5ZNKOijIWRKjdhPkeufsUOaexLj+78mhJc+L7d1MYka8/LdQ==", + "node_modules/mdast-util-directive/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/mdast-util-directive/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-directive/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/estree-jsx": "^0.0.1" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-markdown": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.2.6.tgz", - "integrity": "sha512-doJZmTEGagHypWvJ8ltinmwUsT9ZaNgNIQW6Gl7jNdsI1QZkTHTimYW561Niy2s8AEPAqEgV0dIh2UOVlSXUJA==", + "node_modules/mdast-util-directive/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-nlcst": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-5.2.1.tgz", - "integrity": "sha512-Xznpj85MsJnLQjBboajOovT2fAAvbbbmYutpFgzLi9pjZEOkgGzjq+t6fHcge8uzZ5uEkj5pigzw2QrnIVq/kw==", + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/nlcst": "^1.0.0", - "@types/unist": "^2.0.0", - "nlcst-to-string": "^3.0.0", - "unist-util-position": "^4.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-nlcst/node_modules/nlcst-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.0.tgz", - "integrity": "sha512-Y8HQWKw/zrHTCnu2zcFBN1dV6vN0NUG7s5fkEj380G8tF3R+vA2KG+tDl2QoHVQCTHGHVXwoni2RQkDSFQb1PA==", + "node_modules/mdast-util-from-markdown/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, "dependencies": { - "@types/nlcst": "^1.0.0" + "@types/unist": "*" + } + }, + "node_modules/mdast-util-from-markdown/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/mdast-util-from-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", + "node_modules/mdast-util-from-markdown/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "node_modules/mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "dev": true, "dependencies": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/mdast-util-frontmatter/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "node_modules/mdast-util-frontmatter/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "node_modules/mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-extension-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz", - "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==", + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", "dev": true, "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "node_modules/mdast-util-mdx-expression/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/unist": "*" } }, - "node_modules/micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", + "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "dev": true, + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@types/unist": "*" } }, - "node_modules/micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "node_modules/mdast-util-mdx-jsx/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/mdast-util-mdx-jsx/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "node_modules/mdast-util-mdx-jsx/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "node_modules/mdast-util-mdxjs-esm/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/unist": "*" } }, - "node_modules/micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "node_modules/mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "node_modules/mdast-util-phrasing/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/unist": "*" } }, - "node_modules/micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], + "node_modules/mdast-util-phrasing/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/mdast-util-phrasing/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "node_modules/mdast-util-to-hast": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", + "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "node_modules/mdast-util-to-hast/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@types/unist": "*" } }, - "node_modules/micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "node_modules/mdast-util-to-hast/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true }, - "node_modules/micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", + "node_modules/mdast-util-to-hast/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "node_modules/mdast-util-to-hast/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-symbol": "^1.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-types": "^1.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "node_modules/mdast-util-to-hast/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], "dependencies": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", + "node_modules/mdast-util-to-markdown/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "dependencies": { + "@types/unist": "*" + } }, - "node_modules/micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] + "node_modules/mdast-util-to-markdown/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, - "node_modules/mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "node_modules/mdast-util-to-markdown/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/mdast-util-to-markdown/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/mdast-util-to-markdown/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true, - "peer": true - }, - "node_modules/nlcst-to-string": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz", - "integrity": "sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==", + "node_modules/mdast-util-to-nlcst": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-7.0.0.tgz", + "integrity": "sha512-YfWgABD6izaK7Tzx37V4268THKeusHU+S2qet98h9vrffMxwd/2jqFKxNYz9cCAPYA8p/5BXQuF313JuVFDC9A==", "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^3.0.0", + "unist-util-position": "^5.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/no-cliches": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/no-cliches/-/no-cliches-0.3.4.tgz", - "integrity": "sha512-oUqnng1vhKLaA4GR+OzVbLuZZ7OOguKCtMHxHMiyP8+9mXidKfoCyc030LbAyNI3xcgCHHyitK3Q8wP+w6DwVQ==", + "node_modules/mdast-util-to-nlcst/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, - "engines": { - "node": ">=6", - "npm": ">=5" - }, - "peerDependencies": { - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-react-hooks": "^4.0.0" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/normalize-path": { + "node_modules/mdast-util-to-nlcst/node_modules/@types/unist": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - } + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/mdast-util-to-nlcst/node_modules/nlcst-to-string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", + "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "@types/nlcst": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "node_modules/mdast-util-to-nlcst/node_modules/nlcst-to-string/node_modules/@types/nlcst": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.2.tgz", + "integrity": "sha512-ykxL/GDDUhqikjU0LIywZvEwb1NTYXTEWf+XgMSS2o6IXIakafPccxZmxgZcvJPZ3yFl2kdL1gJZz3U3iZF3QA==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^2" } }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "node_modules/mdast-util-to-nlcst/node_modules/nlcst-to-string/node_modules/@types/unist": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==", + "dev": true + }, + "node_modules/mdast-util-to-nlcst/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.hasown": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "node_modules/mdast-util-to-nlcst/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "node_modules/mdast-util-to-nlcst/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/mdast-util-to-nlcst/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "wrappy": "1" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", "dev": true, - "peer": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "@types/mdast": "^3.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/p-any": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", - "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", + "node_modules/mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "dependencies": { - "p-cancelable": "^2.0.0", - "p-some": "^4.0.0", - "type-fest": "^0.3.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-any/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, "engines": { "node": ">=6" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "node_modules/mem/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", "dev": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", "dev": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-memoize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-2.1.0.tgz", - "integrity": "sha512-c6+a2iV4JyX0r4+i2IBJYO0r6LZAT2fg/tcB6GQbv1uzZsfsmKT7Ej5DRT1G6Wi7XUJSV2ZiP9+YEtluvhCmkg==", + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "mem": "^4.0.0", - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-some": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", - "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "aggregate-error": "^3.0.0", - "p-cancelable": "^2.0.0" - }, - "engines": { - "node": ">=8" + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-some/node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", "dev": true, - "engines": { - "node": ">=8" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", "dev": true, - "engines": { - "node": ">=6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", "dev": true, - "peer": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "dependencies": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/passive-voice": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/passive-voice/-/passive-voice-0.1.0.tgz", - "integrity": "sha1-Fv+RrkC6DpLEPmcXY/3IQqcCcLE=", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", "dev": true, - "peer": true + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/prepend-http": { + "node_modules/micromark-util-subtokenize": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "node_modules/propose": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", - "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true, - "dependencies": { - "levenshtein-edit-distance": "^1.0.0" + "engines": { + "node": ">=4" } }, - "node_modules/public-ip": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.4.tgz", - "integrity": "sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA==", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "dependencies": { - "dns-socket": "^4.2.2", - "got": "^9.6.0", - "is-ip": "^3.1.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, + "peer": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, - "peer": true, "engines": { - "node": ">=6" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "peer": true - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { - "node": ">= 6" + "node": ">=10" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" }, "engines": { - "node": ">=8.10.0" + "node": ">=10" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true, "peer": true }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "node_modules/nlcst-to-string": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz", + "integrity": "sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==", "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/no-cliches": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/no-cliches/-/no-cliches-0.3.4.tgz", + "integrity": "sha512-oUqnng1vhKLaA4GR+OzVbLuZZ7OOguKCtMHxHMiyP8+9mXidKfoCyc030LbAyNI3xcgCHHyitK3Q8wP+w6DwVQ==", "dev": true, - "peer": true, "engines": { - "node": ">=8" + "node": ">=6", + "npm": ">=5" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "peerDependencies": { + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsx-a11y": "^6.4.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-react-hooks": "^4.0.0" } }, - "node_modules/remark": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", - "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==", + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-cli": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-10.0.1.tgz", - "integrity": "sha512-+eln31zLE69JwBMoa8nd2sPC0DFZyiWgBrshL8aKb3L2XXTRMuEKWE/IAtNPYEtcktceAQw+OpmqVy8pAmGOwQ==", - "dev": true, - "dependencies": { - "remark": "^14.0.0", - "unified-args": "^9.0.0" + "abbrev": "1" }, "bin": { - "remark": "cli.js" + "nopt": "bin/nopt.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/remark-frontmatter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", - "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-frontmatter": "^1.0.0", - "micromark-extension-frontmatter": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-heading-gap": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-heading-gap/-/remark-heading-gap-5.0.1.tgz", - "integrity": "sha512-Jt2Jh9K5tS7+gpMwddv7hQFpFiYYwB1LkcpvElx7DuNHIfx7LglMKVM/j0DojEVbSCX9U8wV4IotMYzdjk1++A==", + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "engines": { + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.1.1.tgz", - "integrity": "sha512-zhe6twuqgkx/9KgZyNyaO0cceA4jQuJcyzMOBC+JZiAzMN6mFUmcssWZyY30ko8ut9vQDMX/pyQnolGn+Fg/Tw==", + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-lint-blockquote-indentation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.1.1.tgz", - "integrity": "sha512-u9cjedM6zcK8vRicis5n/xeOSDIC3FGBCKc3K9pqw+nNrOjY85FwxDQKZZ/kx7rmkdRZEhgyHak+wzPBllcxBQ==", + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, + "peer": true, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-lint-checkbox-character-style": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.1.1.tgz", - "integrity": "sha512-KPSW3wfHfB8m9hzrtHiBHCTUIsOPX5nZR7VM+2pMjwqnhI6Mp94DKprkNo1ekNZALNeoZIDWZUSYxSiiwFfmVQ==", + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peer": true, + "engines": { + "node": ">= 0.4" } }, - "node_modules/remark-lint-checkbox-content-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.1.1.tgz", - "integrity": "sha512-apkM6sqCwAHwNV0v6KuEbq50fH3mTAV4wKTwI1nWgEj33/nf4+RvLLPgznoc2olZyeAIHR69EKPQiernjCXPOw==", + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, + "peer": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-lint-code": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-code/-/remark-lint-code-2.0.0.tgz", - "integrity": "sha1-A+DC6Qru2+h1qHlf6s9XmIt9lXw=", + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dev": true, + "peer": true, "dependencies": { - "unified-lint-rule": "^1.0.0", - "unist-util-visit": "^1.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/remark-lint-code-block-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.1.0.tgz", - "integrity": "sha512-Hv4YQ8ueLGpjItla4CkcOkcfGj+nlquqylDgCm1/xKnW+Ke2a4qVTMVJrP9Krp4FWmXgktJLDHjhRH+pzhDXLg==", + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dev": true, + "peer": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-lint-code/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, + "peer": true, "dependencies": { - "wrapped": "^1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-lint-code/node_modules/unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "node_modules/remark-lint-code/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dev": true, + "peer": true, "dependencies": { - "unist-util-visit-parents": "^2.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-lint-code/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { - "unist-util-is": "^3.0.0" + "wrappy": "1" } }, - "node_modules/remark-lint-definition-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-3.1.1.tgz", - "integrity": "sha512-dirX0BSfbm1Ixx4Hv4xRQliEP1rw8dDitw2Om3XcO2QqF8bWrzF06/xeMlDNAaT77Cxqb9S7bODo/q+CYUxyWQ==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, + "peer": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/remark-lint-definition-spacing": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.1.1.tgz", - "integrity": "sha512-PR+cYvc0FMtFWjkaXePysW88r7Y7eIwbpUGPFDIWE48fiRiz8U3VIk05P3loQCpCkbmUeInAAYD8tIFPTg4Jlg==", + "node_modules/p-any": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", + "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "p-cancelable": "^2.0.0", + "p-some": "^4.0.0", + "type-fest": "^0.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/remark-lint-emphasis-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-3.1.1.tgz", - "integrity": "sha512-VduuT+KAr0vA78xBLJdIcenCQja4mAd81aNACfdz7BUPLphIQa84D5uzl+nZatSaCXLebCNp5jP/bzVUsBmRKw==", + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/remark-lint-fenced-code-flag": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.1.1.tgz", - "integrity": "sha512-FFVZmYsBccKIIEgOtgdZEpQdARtAat1LTLBydnIpyNIvcntzWwtrtlj9mtjL8ZoSRre8HtwmEnBFyOfmM/NWaA==", + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/remark-lint-fenced-code-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.1.1.tgz", - "integrity": "sha512-x/t8sJWPvE46knKz6zW03j9VX5477srHUmRFbnXhZ3K8e37cYVUIvfbPhcPCAosSsOki9+dvGfZsWQiKuUNNfQ==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=4" } }, - "node_modules/remark-lint-file-extension": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.1.1.tgz", - "integrity": "sha512-r6OMe27YZzr2NFjPMbBxgm8RZxigRwzeFSjapPlqcxk0Q0w/6sosJsceBNlGGlk00pltvv7NPqSexbXUjirrQQ==", + "node_modules/p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/remark-lint-final-definition": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.1.1.tgz", - "integrity": "sha512-94hRV+EBIuLVFooiimsZwh5ZPEcTqjy5wr7LgqxoUUWy+srTanndaLoki7bxQJeIcWUnomZncsJAyL0Lo7toxw==", + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/remark-lint-final-newline": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.1.1.tgz", - "integrity": "sha512-cgKYaI7ujUse/kV4KajLv2j1kmi1CxpAu+w7wIU0/Faihhb3sZAf4a5ACf2Wu8NoTSIr1Q//3hDysG507PIoDg==", + "node_modules/p-memoize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-2.1.0.tgz", + "integrity": "sha512-c6+a2iV4JyX0r4+i2IBJYO0r6LZAT2fg/tcB6GQbv1uzZsfsmKT7Ej5DRT1G6Wi7XUJSV2ZiP9+YEtluvhCmkg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "mem": "^4.0.0", + "mimic-fn": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/remark-lint-hard-break-spaces": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.1.1.tgz", - "integrity": "sha512-UfwFvESpX32qwyHJeluuUuRPWmxJDTkmjnWv2r49G9fC4Jrzm4crdJMs3sWsrGiQ3mSex6bgp/8rqDgtBng2IA==", + "node_modules/p-some": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", + "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "aggregate-error": "^3.0.0", + "p-cancelable": "^2.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/remark-lint-heading-increment": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-3.1.1.tgz", - "integrity": "sha512-DtiMwZNAE/iAZWuZGjTXxYjNDQ375r59C99aVeVp1nKaovIufKuHWAm9U/9FAGBJNgBx6Ovfdej4YwIxd0yAPw==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "p-finally": "^1.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/remark-lint-heading-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.1.1.tgz", - "integrity": "sha512-Qm7ZAF+s46ns0Wo5TlHGIn/PPMMynytn8SSLEdMIo6Uo/+8PAcmQ3zU1pj57KYxfyDoN5iQPgPIwPYMLYQ2TSQ==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "peer": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "callsites": "^3.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=6" } }, - "node_modules/remark-lint-heading-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-whitespace/-/remark-lint-heading-whitespace-1.0.0.tgz", - "integrity": "sha512-DykoBIXNbkihg64D+mztSOv3l82RTH4tIZW/HUB4QM4NpIEB+pVIPQpCYD0K4pTgvKiwoqsj4NY8qJ1EhNHAmQ==", + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", "dev": true, "dependencies": { - "mdast-util-to-string": "^1.0.4", - "unified-lint-rule": "^1.0.2", - "unist-util-visit": "^1.3.0" - } - }, - "node_modules/remark-lint-heading-whitespace/node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", - "dev": true, + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-heading-whitespace/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/parse-json": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.0.tgz", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", "dev": true, "dependencies": { - "wrapped": "^1.0.1" + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "engines": { + "node": ">=16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-is": { + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", "dev": true, - "dependencies": { - "unist-util-visit-parents": "^2.0.0" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "node_modules/parse-json/node_modules/type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", "dev": true, - "dependencies": { - "unist-util-is": "^3.0.0" + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-link-title-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-3.1.1.tgz", - "integrity": "sha512-JWWiuUFy/N2iwQ3eWIxFy6olX8D7xCFw8LoM0vZI2CHTZJrmDMaWwnl8jziP+HHHheFX3wkVqsoaYod536ArRw==", + "node_modules/parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/remark-lint-list-item-bullet-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.1.1.tgz", - "integrity": "sha512-NFvXVj1Nm12+Ma48NOjZCGb/D0IhmUcxyrTCpPp+UNJhEWrmFxM8nSyIiZgXadgXErnuv+xm2Atw7TAcZ9a1Cg==", + "node_modules/parse-latin/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/parse-latin/node_modules/nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/nlcst": "^2.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-content-indent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-3.1.1.tgz", - "integrity": "sha512-gcZhAXLd1onkutTEqQTybyANjdxvlOlu0y/AU4H3f6L99UGC85ymRhEeu5vGSkvsKKPR1FrMTEH6G2nNgtavgg==", + "node_modules/parse-latin/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-indent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.1.1.tgz", - "integrity": "sha512-OSTG64e52v8XBmmeT0lefpiAfCMYHJxMMUrMnhTjLVyWAbEO0vqqR5bLvfLwzK+P4nY2D/8XKku0hw35dM86Rw==", + "node_modules/parse-latin/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-list-item-spacing": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-4.1.1.tgz", - "integrity": "sha512-MqXmahPgYrvfA7SPqmcAC6fI40jIgXG33EeE/MhFvMLWh04k+fqGf2O2aH1KT664MlwM4oETbTI4xj3/KCIHZA==", + "node_modules/parse-latin/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-maximum-heading-length": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-3.1.1.tgz", - "integrity": "sha512-hTOvRDnULpu0S+k51lovT28TLBgtw8XR0qq+mECSsoyuT4C38UBjQRic5OPo68AZMH0ad/93uj6yvfFtH0K8Lg==", - "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "node_modules/passive-voice": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/passive-voice/-/passive-voice-0.1.0.tgz", + "integrity": "sha1-Fv+RrkC6DpLEPmcXY/3IQqcCcLE=", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" } }, - "node_modules/remark-lint-maximum-line-length": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.1.2.tgz", - "integrity": "sha512-KwddpVmNifTHNXwTQQgVufuUvv0hhu9kJVvmpNdEvfEc7tc3wBkaavyi3kKsUB8WwMhGtZuXVWy6OdPC1axzhw==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/remark-lint-no-auto-link-without-protocol": { + "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.1.1.tgz", - "integrity": "sha512-lCjBuoSUWjN1kO0J7vqQgn7HUF/WeOHOqc3oiq9LMRXIovKWqPCBi77o8Npv8KfV+JXeRl+hrupfbhJXlLturA==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=8" } }, - "node_modules/remark-lint-no-blockquote-without-marker": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.1.1.tgz", - "integrity": "sha512-7jL7eKS25kKRhQ7SKKB5eRfNleDMWKWAmZ5Y/votJdDoM+6qsopLLumPWaSzP0onyV3dyHRhPfBtqelt3hvcyA==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "peer": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/remark-lint-no-consecutive-blank-lines": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.1.2.tgz", - "integrity": "sha512-wRsR3kFgHaZ4mO3KASU43oXGLGezNZ64yNs1ChPUacKh0Bm7cwGnxN9GHGAbOXspwrYrN2eCDxzCbdPEZi2qKw==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", "dev": true, - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/remark-lint-no-dead-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-dead-urls/-/remark-lint-no-dead-urls-1.1.0.tgz", - "integrity": "sha512-it3EZmMQ+hwGhUf60NkXN0mMIFuFkS0cxdbgEbhZ/Fj1PlUBpe3gDBtWJ/sqNwSNvQlNSzpvMQkNHSoAhlsVjA==", + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true, - "dependencies": { - "check-links": "^1.1.8", - "is-online": "^8.2.1", - "unified-lint-rule": "^1.0.4", - "unist-util-visit": "^2.0.1" - }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/remark-lint-no-dead-urls/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "dependencies": { - "wrapped": "^1.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peer": true, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/remark-lint-no-dead-urls/node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/remark-lint-no-dead-urls/node_modules/unist-util-visit": { + "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "peer": true, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/remark-lint-no-dead-urls/node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, + "peer": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "node_modules/remark-lint-no-duplicate-definitions": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.1.1.tgz", - "integrity": "sha512-9p+nBz8VvV+t4g/ALNLVN8naV+ffAzC4ADyg9QivzmKwLjyF93Avt4HYNlb2GZ+aoXRQSVG1wjjWFeDC9c7Tdg==", + "node_modules/propose": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", + "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "levenshtein-edit-distance": "^1.0.0" } }, - "node_modules/remark-lint-no-duplicate-headings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-3.1.1.tgz", - "integrity": "sha512-gSO/BngGkxF35Fsctzt3YMwGEZ8F7f71zx7h0Y97DylyL6WXVuWP4saCmQTlbB4FpD0UXEnRROJ6fBFDvJlzOA==", + "node_modules/public-ip": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.4.tgz", + "integrity": "sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" + "dns-socket": "^4.2.2", + "got": "^9.6.0", + "is-ip": "^3.1.0" + }, + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-emphasis-as-heading": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-3.1.1.tgz", - "integrity": "sha512-F45yuLsYVP4r6OjVtePKk7Aymnf3rBLHXYjnSJggEaYn0j+72xOBLrqmj6ii5YGfDsBwG2pDNTBx4vm3xM7P0Q==", + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/remark-lint-no-empty-sections": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-empty-sections/-/remark-lint-no-empty-sections-4.0.0.tgz", - "integrity": "sha512-Tx1nCu7Dq3dsJ500402sSvM0uVK/6khSuEjx8K8u9aHN+Y4vjL6h88xVzdzCmZq2J2yqyFnvMjG1y7lQv+DRvg==", + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "dependencies": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-visit": "^1.0.0" + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "engines": { + "node": ">=10" + }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/quotation": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quotation/-/quotation-2.0.3.tgz", + "integrity": "sha512-yEc24TEgCFLXx7D4JHJJkK4JFVtatO8fziwUxY4nB/Jbea9o9CVS3gt22mA0W7rPYAGW2fWzYDSOtD94PwOyqA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "peer": true + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "dependencies": { - "wrapped": "^1.0.1" + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": ">=10" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { - "unist-util-visit-parents": "^2.0.0" + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true, + "peer": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dev": true, + "peer": true, "dependencies": { - "unist-util-is": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-lint-no-empty-url": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-empty-url/-/remark-lint-no-empty-url-3.1.1.tgz", - "integrity": "sha512-zxIkDMggf6R/NCDkYAsaVHaFhklkp6WvV/wdeJAzT3BverGFnM8QIHUAv8YIQvCGqYWov275SVN1eu81DoU95g==", + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-articles": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.1.1.tgz", - "integrity": "sha512-7fiHKQUGvP4WOsieZ1dxm8WQWWjXjPj0Uix6pk2dSTJqxvaosjKH1AV0J/eVvliat0BGH8Cz4SUbuz5vG6YbdQ==", + "node_modules/remark-cli": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-12.0.1.tgz", + "integrity": "sha512-2NAEOACoTgo+e+YAaCTODqbrWyhMVmlUyjxNCkTrDRHHQvH6+NbrnqVvQaLH/Q8Ket3v90A43dgAJmXv8y5Tkw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "import-meta-resolve": "^4.0.0", + "markdown-extensions": "^2.0.0", + "remark": "^15.0.0", + "unified-args": "^11.0.0" + }, + "bin": { + "remark": "cli.js" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-consecutive-dashes": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.1.1.tgz", - "integrity": "sha512-tM4IpURGuresyeIBsXT5jsY3lZakgO6IO59ixcFt015bFjTOW54MrBvdJxA60QHhf5DAyHzD8wGeULPSs7ZQfg==", + "node_modules/remark-cli/node_modules/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-irregular-characters": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-2.1.1.tgz", - "integrity": "sha512-rVeCv1XRdLtp/rxLaiFKElaIHuIlokypV/c2aCG3VVYcQ4+ZmJxq018kEsolR2+Dv9m3vKp8Fy1482US4g4WKA==", + "node_modules/remark-frontmatter/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@types/unist": "*" + } + }, + "node_modules/remark-frontmatter/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-frontmatter/node_modules/unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-mixed-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-2.1.1.tgz", - "integrity": "sha512-mJU3hYzyXNo8NkoSafPcsgr+Gema+vDCzNWlLw05UdFXJK/cVy+6DVsbrEFjrz8L+WF7uQmUHBtTvd91SqoItg==", + "node_modules/remark-frontmatter/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-file-name-outer-dashes": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.1.1.tgz", - "integrity": "sha512-2kRcVNzZb0zS3jE+Iaa6MEpplhqXSdsHBILS+BxJ4cDGAAIdeipY8hKaDLdZi+34wvrfnDxNgvNLcHpgqO+OZA==", + "node_modules/remark-frontmatter/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-content-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.1.1.tgz", - "integrity": "sha512-W4zF7MA72IDC5JB0qzciwsnioL5XlnoE0r1F7sDS0I5CJfQtHYOLlxb3UAIlgRCkBokPWCp0E4o1fsY/gQUKVg==", + "node_modules/remark-frontmatter/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.1.1.tgz", - "integrity": "sha512-3vIfT7gPdpE9D7muIQ6YzSF1q27H9SbsDD7ClJRkEWxMiAzBg0obOZFOIBYukUkmGWdOR5P1EDn5n9TEzS1Fyg==", + "node_modules/remark-heading-gap": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-heading-gap/-/remark-heading-gap-6.0.0.tgz", + "integrity": "sha512-xsJJZ0BC9J6XFY0c7segxuSKrJ95EDHEh06+b5FOgbhyJ9Z7yWKxWEJpsa2Bp4gkeMAEkoODH4mjWIV0JD2Urg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-like-paragraph": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-like-paragraph/-/remark-lint-no-heading-like-paragraph-3.1.1.tgz", - "integrity": "sha512-eDQkw1ir0j2VVmZd60Hy3CUAj85U7zKf59bGEBdXr2OQYJQhvme7XqKwY8QfMlBqn9lYg1/DxsGWt0+5ESIogw==", + "node_modules/remark-heading-gap/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "*" + } + }, + "node_modules/remark-heading-gap/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-heading-gap/node_modules/unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-heading-punctuation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-3.1.1.tgz", - "integrity": "sha512-ZexHx4rmsjKVF1/Fvdig0yOgpWl0wFa43+sqg880HT3PW9KmEczjSRkwlMaTlVgDzC0paNn2FXfQMuEQW4YDLg==", + "node_modules/remark-heading-gap/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-inline-padding": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.1.tgz", - "integrity": "sha512-++IMm6ohOPKNOrybqjP9eiclEtVX/Rd2HpF2UD9icrC1X5nvrI6tlfN55tePaFvWAB7pe6MW4LzNEMnWse61Lw==", + "node_modules/remark-heading-gap/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-literal-urls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.1.1.tgz", - "integrity": "sha512-tZZ4gtZMA//ZAf7GJTE8S9yjzqXUfUTlR/lvU7ffc7NeSurqCBwAtHqeXVCHiD39JnlHVSW2MLYhvHp53lBGvA==", + "node_modules/remark-heading-gap/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-multiple-toplevel-headings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.1.1.tgz", - "integrity": "sha512-bM//SIBvIkoGUpA8hR5QibJ+7C2R50PTIRrc4te93YNRG+ie8bJzjwuO9jIMedoDfJB6/+7EqO9FYBivjBZ3MA==", + "node_modules/remark-lint": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.0.tgz", + "integrity": "sha512-E8yHHDOJ8b+qI0G49BRu24pe8t0fNNBWv8ENQJpCGNrVeTeyBIGEbaUe1yuF7OG8faA6PVpcN/pqWjzW9fcBWQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "remark-message-control": "^8.0.0", + "unified": "^11.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-reference-like-url": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-reference-like-url/-/remark-lint-no-reference-like-url-3.1.1.tgz", - "integrity": "sha512-ELO2uez1NO9wEb2nNRY4uVBfw4TYYUHWOnLajExGY92+i3Ylt3EmMwRONT2maJX5qKj4cu8uPi7HAkMIxq8jFg==", + "node_modules/remark-lint-blockquote-indentation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-4.0.0.tgz", + "integrity": "sha512-hdUvn+KsJbBKpY9jLY01PmfpJ/WGhLu9GJMXQGU8ADXJc+F5DWSgKAr6GQ1IUKqvGYdEML/KZ61WomWFUuecVA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-repeat-punctuation": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-repeat-punctuation/-/remark-lint-no-repeat-punctuation-0.1.4.tgz", - "integrity": "sha512-JJduCs4FimdBcR1AB576SqIYOjt+7t8OjTnnlZMvjnw7lzkuL0+nNNHyNXVPaK6jxaLjEUhrH2/smU6vZFUT7g==", + "node_modules/remark-lint-blockquote-indentation/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "unified-lint-rule": "^1.0.3", - "unist-util-map": "^1.0.4", - "unist-util-to-list-of-char": "^0.1.3" + "@types/unist": "*" } }, - "node_modules/remark-lint-no-repeat-punctuation/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/remark-lint-blockquote-indentation/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-blockquote-indentation/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, "dependencies": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shell-dollars": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.1.1.tgz", - "integrity": "sha512-Q3Ad1TaOPxbYog5+Of/quPG3Fy+dMKiHjT8KsU7NDiHG6YJOnAJ3f3w+y13CIlNIaKc/MrisgcthhrZ7NsgXfA==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-image": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.1.1.tgz", - "integrity": "sha512-m8tH+loDagd1JUns/T4eyulVXgVvE+ZSs7owRUOmP+dgsKJuO5sl1AdN9eyKDVMEvxHF3Pm5WqE62QIRNM48mA==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-shortcut-reference-link": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.1.1.tgz", - "integrity": "sha512-oDJ92/jXQ842HgrBGgZdP7FA+N2jBMCBU2+jRElkS+OWVut0UaDILtNavNy/e85B3SLPj3RoXKF96M4vfJ7B2A==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-table-indentation": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.1.1.tgz", - "integrity": "sha512-eklvBxUSrkVbJxeokepOvFZ3n2V6zaJERIiOowR+y/Bz4dRHDMij1Ojg55AMO9yUMvxWPV3JPOeThliAcPmrMg==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-tabs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.1.1.tgz", - "integrity": "sha512-+MjXoHSSqRFUUz6XHgB1z7F5zIETxhkY+lC5LsOYb1r2ZdujZQWzBzNW5ya4HH5JiDVBPhp8MrqM9cP1v7tB5g==", + "node_modules/remark-lint-blockquote-indentation/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-undefined-references": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.1.1.tgz", - "integrity": "sha512-J20rKfTGflLiTI3T5JlLZSmINk6aDGmZi1y70lpU69LDfAyHAKgDK6sSW9XDeFmCPPdm8Ybxe5Gf2a70k+GcVQ==", + "node_modules/remark-lint-blockquote-indentation/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-no-unused-definitions": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.1.1.tgz", - "integrity": "sha512-/GtyBukhAxi5MEX/g/m+FzDEflSbTe2/cpe2H+tJZyDmiLhjGXRdwWnPRDp+mB9g1iIZgVRCk7T4v90RbQX/mw==", + "node_modules/remark-lint-blockquote-indentation/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.1.1.tgz", - "integrity": "sha512-IWcWaJoaSb4yoSOuvDbj9B2uXp9kSj58DqtrMKo8MoRShmbj1onVfulTxoTLeLtI11NvW+mj3jPSpqjMjls+5Q==", + "node_modules/remark-lint-checkbox-character-style": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-5.0.0.tgz", + "integrity": "sha512-K0G/Nok59fb2q5KUxcemBVt+ymnhTkDVLJAatZ4PAh9At8y0DGctHdU27jWsuvO0Fs7Zy62Usk7IJE2VO89p1w==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-ordered-list-marker-value": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.1.1.tgz", - "integrity": "sha512-+bQZbo+v/A8CuLrO71gobJuKR4/sfnPgWyEggSa+zq+LXPK1HiMDjap0Wr07uYgcUXsXIPh+HD/5J5by6JL+vg==", + "node_modules/remark-lint-checkbox-character-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "*" + } + }, + "node_modules/remark-lint-checkbox-character-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-checkbox-character-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-rule-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.1.1.tgz", - "integrity": "sha512-+oZe0ph4DWHGwPkQ/FpqiGp4WULTXB1edftnnNbizYT+Wr+/ux7GNTx78oXH/PHwlnOtVIExMc4W/vDXrUj/DQ==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-strong-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.1.1.tgz", - "integrity": "sha512-tX9Os2C48Hh8P8CouY4dcnAhGnR3trL+NCDqIvJvFDR9Rvm9yfNQaY2N4ZHWVY0iUicq9DpqEiJTgUsT8AGv/w==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-cell-padding": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.1.2.tgz", - "integrity": "sha512-cx5BXjHtpACa7Z51Vuqzy9BI4Z8Hnxz7vklhhrubkoB7mbctP/mR+Nh4B8eE5VtgFYJNHFwIltl96PuoctFCeQ==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipe-alignment": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-3.1.1.tgz", - "integrity": "sha512-WOHv2yL4ZwXHM06MIyQNnGFYKz9m2k/GFIA/6hpArF8Ph/3v8CF0J/Hb3Yyfg39e5nODw3D2G3okCO+xgyGQGA==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-table-pipes": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.1.1.tgz", - "integrity": "sha512-mJnB2FpjJTE4s9kE1JX8gcCjCFvtGPjzXUiQy0sbPHn2YM9EWG7kvFWYoqWK4w569CEQJyxZraEPltmhDjQTjg==", + "node_modules/remark-lint-checkbox-character-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-unordered-list-marker-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.1.1.tgz", - "integrity": "sha512-JwH8oIDi9f5Z8cTQLimhJ/fkbPwI3OpNSifjYyObNNuc4PG4/NUoe5ZuD10uPmPYHZW+713RZ8S5ucVCkI8dDA==", + "node_modules/remark-lint-checkbox-character-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-write-good": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remark-lint-write-good/-/remark-lint-write-good-1.2.0.tgz", - "integrity": "sha512-HYiwM16RRBm979yDb/IVwPe1eFhzA1HATe1WucRiYWS10jcPRgJe9FihH7W5uzQFDqX5aRbTtu/yPdq+hPnYkw==", + "node_modules/remark-lint-checkbox-character-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "nlcst-to-string": "^2.0.0", - "unified-lint-rule": "^1.0.1", - "unist-util-visit": "^1.1.1", - "write-good": "^1.0.2" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-write-good/node_modules/unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "node_modules/remark-lint-checkbox-content-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-5.0.0.tgz", + "integrity": "sha512-7L25a7TEfdogFSh4HDOnB+GTTTEiXJDMlceUPft9bzIjElI8Hm2+a2D8jUQn4ahj+j/3LmdZW4GjAeyfdPuqTA==", "dev": true, "dependencies": { - "wrapped": "^1.0.1" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-lint-write-good/node_modules/unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "node_modules/remark-lint-write-good/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "*" } }, - "node_modules/remark-lint-write-good/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dev": true, - "dependencies": { - "unist-util-is": "^3.0.0" - } + "node_modules/remark-lint-checkbox-content-indent/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, - "node_modules/remark-message-control": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz", - "integrity": "sha512-xKRWl1NTBOKed0oEtCd8BUfH5m4s8WXxFFSoo7uUwx6GW/qdCy4zov5LfPyw7emantDmhfWn5PdIZgcbVcWMDQ==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-consistent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-5.1.1.tgz", - "integrity": "sha512-DZQfomiVi/1x7NRByWrOiIC+olEGa1PpyykKrowvYp5qr/Seq60FqU7OjBJxtcOLzgnQcu9Y2JXdHxFi4AAPXQ==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-blockquote-indentation": "^3.0.0", - "remark-lint-checkbox-character-style": "^4.0.0", - "remark-lint-code-block-style": "^3.0.0", - "remark-lint-emphasis-marker": "^3.0.0", - "remark-lint-fenced-code-marker": "^3.0.0", - "remark-lint-heading-style": "^3.0.0", - "remark-lint-link-title-style": "^3.0.0", - "remark-lint-list-item-content-indent": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "remark-lint-rule-style": "^3.0.0", - "remark-lint-strong-marker": "^3.0.0", - "remark-lint-table-cell-padding": "^4.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-markdown-style-guide": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-5.1.2.tgz", - "integrity": "sha512-MIAhnz0wDOq/MqLucSaAPquKGFE2I5SxqRjgWT+ZGK7TmqTxrro53e11/Pc19xPX4evmzI5CZdvaRnIoxP3ysQ==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-blockquote-indentation": "^3.0.0", - "remark-lint-code-block-style": "^3.0.0", - "remark-lint-definition-case": "^3.0.0", - "remark-lint-definition-spacing": "^3.0.0", - "remark-lint-emphasis-marker": "^3.0.0", - "remark-lint-fenced-code-flag": "^3.0.0", - "remark-lint-fenced-code-marker": "^3.0.0", - "remark-lint-file-extension": "^2.0.0", - "remark-lint-final-definition": "^3.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-heading-increment": "^3.0.0", - "remark-lint-heading-style": "^3.0.0", - "remark-lint-link-title-style": "^3.0.0", - "remark-lint-list-item-content-indent": "^3.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-list-item-spacing": "^4.0.0", - "remark-lint-maximum-heading-length": "^3.0.0", - "remark-lint-maximum-line-length": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-consecutive-blank-lines": "^4.0.0", - "remark-lint-no-duplicate-headings": "^3.0.0", - "remark-lint-no-emphasis-as-heading": "^3.0.0", - "remark-lint-no-file-name-articles": "^2.0.0", - "remark-lint-no-file-name-consecutive-dashes": "^2.0.0", - "remark-lint-no-file-name-irregular-characters": "^2.0.0", - "remark-lint-no-file-name-mixed-case": "^2.0.0", - "remark-lint-no-file-name-outer-dashes": "^2.0.0", - "remark-lint-no-heading-punctuation": "^3.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-multiple-toplevel-headings": "^3.0.0", - "remark-lint-no-shell-dollars": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-table-indentation": "^4.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "remark-lint-ordered-list-marker-value": "^3.0.0", - "remark-lint-rule-style": "^3.0.0", - "remark-lint-strong-marker": "^3.0.0", - "remark-lint-table-cell-padding": "^4.0.0", - "remark-lint-table-pipe-alignment": "^3.0.0", - "remark-lint-table-pipes": "^4.0.0", - "remark-lint-unordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-preset-lint-recommended": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.1.2.tgz", - "integrity": "sha512-x9kWufNY8PNAhY4fsl+KD3atgQdo4imP3GDAQYbQ6ylWVyX13suPRLkqnupW0ODRynfUg8ZRt8pVX0wMHwgPAg==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-final-newline": "^2.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-list-item-bullet-indent": "^4.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-duplicate-definitions": "^3.0.0", - "remark-lint-no-heading-content-indent": "^4.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-undefined-references": "^4.0.0", - "remark-lint-no-unused-definitions": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-retext": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-5.0.1.tgz", - "integrity": "sha512-h3kOjKNy7oJfohqXlKp+W4YDigHD3rw01x91qvQP/cUkK5nJrDl6yEYwTujQCAXSLZrsBxywlK3ntzIX6c29aA==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-to-nlcst": "^5.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-textr": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-textr/-/remark-textr-5.0.1.tgz", - "integrity": "sha512-Kd5q7I1LsZ04meMZJJwBze/wxiLhAItRTGevDeyx3K/WMd4juO6WbGLro0/99Ui6I+lYx/l90v0Ax4dVPj3/0Q==", + "node_modules/remark-lint-checkbox-content-indent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "textr": "^0.3.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/remark-validate-links": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-11.0.2.tgz", - "integrity": "sha512-SfVDWgF/Albdou1TmrCpq4AvJyvMnPflnaLLPUuFFxKO4Jp1o7fK2sinqPt+WW0DXS4JmtXPXm2FOkB8FJ08tQ==", + "node_modules/remark-lint-code": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code/-/remark-lint-code-2.0.0.tgz", + "integrity": "sha1-A+DC6Qru2+h1qHlf6s9XmIt9lXw=", "dev": true, "dependencies": { - "@types/mdast": "^3.0.0", - "github-slugger": "^1.0.0", - "hosted-git-info": "^4.0.0", - "mdast-util-to-string": "^3.0.0", - "propose": "0.0.5", - "to-vfile": "^7.0.0", - "trough": "^2.0.0", - "unified": "^10.0.0", - "unified-engine": "^9.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" + "unified-lint-rule": "^1.0.0", + "unist-util-visit": "^1.0.0" + } + }, + "node_modules/remark-lint-code-block-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-4.0.0.tgz", + "integrity": "sha512-LKBKMVruEO0tzDnnnqi1TfUcnwY6Mo7cVtZM4E4pKt3KMhtvgU2wD68/MxDOEJd0pmnLrEgIadv74bY0gWhZpg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/resolve": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", - "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "node_modules/remark-lint-code-block-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true, "dependencies": { - "is-core-module": "^2.8.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/unist": "*" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/remark-lint-code-block-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-code-block-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "node_modules/remark-lint-code-block-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true, "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "mri": "^1.1.0" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">=6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/remark-lint-code-block-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/remark-lint-code-block-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, "dependencies": { - "shebang-regex": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/remark-lint-code-block-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "node_modules/remark-lint-code/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "wrapped": "^1.0.1" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/sliced": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", + "node_modules/remark-lint-code/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", "dev": true }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/remark-lint-code/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "unist-util-visit-parents": "^2.0.0" } }, - "node_modules/string-width": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", - "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", + "node_modules/remark-lint-code/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "unist-util-is": "^3.0.0" } }, - "node_modules/string.prototype.matchall": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", - "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "node_modules/remark-lint-definition-case": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-4.0.0.tgz", + "integrity": "sha512-XBmMmj8ii0KZUuJf7ZaVXDGp2+DWE02re9qn/6mV23rBpsDmpz7U1lQWRlwFQIE5q5bxIxP5pX7hDeTH0Egy9Q==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.3.1", - "side-channel": "^1.0.4" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "node_modules/remark-lint-definition-case/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "@types/unist": "*" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "node_modules/remark-lint-definition-case/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-definition-case/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "node_modules/remark-lint-definition-case/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "node_modules/remark-lint-definition-case/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "node_modules/remark-lint-definition-case/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/remark-lint-definition-case/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/remark-lint-definition-case/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/textr": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/textr/-/textr-0.3.0.tgz", - "integrity": "sha1-cXNhKGlirI3za3omGft3OhW5t/c=", - "dev": true - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/remark-lint-definition-case/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "engines": { - "node": ">=8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/to-vfile": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.3.tgz", - "integrity": "sha512-QO0A9aE6Z/YkmQadJ0syxpmNXtcQiu0qAtCKYKD5cS3EfgfFTAXfgLX6AOaBrSfWSek5nfsMf3gBZ9KGVFcLuw==", + "node_modules/remark-lint-definition-spacing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-4.0.0.tgz", + "integrity": "sha512-t6nP8unz6z/DLBTWeOmDFHPFbX3E2PbNgt2fTazRbVnMC6z3o25hBzg5hI6DL0MPt2ZTRX++rJsGRjb+vgh/tQ==", "dev": true, "dependencies": { - "is-buffer": "^2.0.0", - "vfile": "^5.1.0" + "@types/mdast": "^4.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/too-wordy": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/too-wordy/-/too-wordy-0.3.4.tgz", - "integrity": "sha512-EU+UA4zHc06TkVQaravNNVdqX763/ENTIOKiKlqSJ6WKCPwLxHjvY3d0uEJYaq92iojyHPwD2iaYbZKjdw3icA==", + "node_modules/remark-lint-definition-spacing/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "engines": { - "node": ">=6", - "npm": ">=5" + "dependencies": { + "@types/unist": "*" } }, - "node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } + "node_modules/remark-lint-definition-spacing/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, - "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "node_modules/remark-lint-definition-spacing/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/remark-lint-definition-spacing/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true, "dependencies": { - "minimist": "^1.2.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, - "bin": { - "json5": "lib/cli.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true, "dependencies": { - "prelude-ls": "^1.2.1" + "@types/unist": "^3.0.0" }, - "engines": { - "node": ">= 0.8.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "node_modules/remark-lint-definition-spacing/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unified": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz", - "integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==", + "node_modules/remark-lint-definition-spacing/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-args": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", - "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", + "node_modules/remark-lint-definition-spacing/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "@types/text-table": "^0.2.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "chokidar": "^3.0.0", - "fault": "^2.0.0", - "json5": "^2.0.0", - "minimist": "^1.0.0", - "text-table": "^0.2.0", - "unified-engine": "^9.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-engine": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.5.tgz", - "integrity": "sha512-frQ6lUNlkTwVC0JELJqSSITpE7MLrLJqAWmDrUFj5Do6A4/3n6eX5Jyg8fhe4Dbwwh38spqUJd39FtRFG34QWg==", + "node_modules/remark-lint-emphasis-marker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-4.0.0.tgz", + "integrity": "sha512-xIRiB4PFWUOyIslN/UOPL6Lh+J0VD4R11+jo+W4hpGMNsg58l+2SgtdbinlXzDeoBxmaaka9n/sYpJ7cJWEIPQ==", "dev": true, "dependencies": { - "@types/concat-stream": "^1.0.0", - "@types/debug": "^4.0.0", - "@types/is-empty": "^1.0.0", - "@types/js-yaml": "^4.0.0", - "@types/node": "^17.0.0", - "@types/unist": "^2.0.0", - "concat-stream": "^2.0.0", - "debug": "^4.0.0", - "fault": "^2.0.0", - "glob": "^7.0.0", - "ignore": "^5.0.0", - "is-buffer": "^2.0.0", - "is-empty": "^1.0.0", - "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", - "load-plugin": "^4.0.0", - "parse-json": "^6.0.0", - "to-vfile": "^7.0.0", - "trough": "^2.0.0", - "unist-util-inspect": "^7.0.0", - "vfile-message": "^3.0.0", - "vfile-reporter": "^7.0.0", - "vfile-statistics": "^2.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-lint-rule": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.1.tgz", - "integrity": "sha512-vsLHyLZFstqtGse2gvrGwasOmH8M2y+r2kQMoDSWzSqUkQx2MjHjvZuGSv5FUaiv4RQO1bHRajy7lSGp7XWq5A==", + "node_modules/remark-lint-emphasis-marker/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", + "@types/unist": "*" + } + }, + "node_modules/remark-lint-emphasis-marker/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-emphasis-marker/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", "trough": "^2.0.0", - "unified": "^10.0.0", - "vfile": "^5.0.0" + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-message-control": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", - "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", + "node_modules/remark-lint-emphasis-marker/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^3.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-message-control/node_modules/unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", + "node_modules/remark-lint-emphasis-marker/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "node_modules/remark-lint-emphasis-marker/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-generated": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", - "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", + "node_modules/remark-lint-emphasis-marker/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-inspect": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", - "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", + "node_modules/remark-lint-emphasis-marker/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-is": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", - "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "node_modules/remark-lint-emphasis-marker/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-map": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-1.0.5.tgz", - "integrity": "sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag==", + "node_modules/remark-lint-emphasis-marker/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "object-assign": "^4.0.1" - } - }, - "node_modules/unist-util-position": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", - "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", - "dev": true, + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "node_modules/remark-lint-fenced-code-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz", + "integrity": "sha512-Zs0wJd4nRvBo/9NWQVfWg5Ykapbo0Zzw/SyZc3f0h73S1gTZZcfeU+bA5oDivlBdcUgLBsyHRE0QaoaVvN3/Wg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "quotation": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-to-list-of-char": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.3.tgz", - "integrity": "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA==", + "node_modules/remark-lint-fenced-code-flag/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "unist-util-generated": "^1.1.6", - "unist-util-visit": "^1.4.0" + "@types/unist": "*" } }, - "node_modules/unist-util-to-list-of-char/node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "node_modules/remark-lint-fenced-code-flag/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-fenced-code-flag/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-to-list-of-char/node_modules/unist-util-is": { + "node_modules/remark-lint-fenced-code-flag/node_modules/unified-lint-rule": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "node_modules/unist-util-to-list-of-char/node_modules/unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-to-list-of-char/node_modules/unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "unist-util-is": "^3.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-visit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", - "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^5.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-visit-parents": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", - "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/remark-lint-fenced-code-flag/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, "dependencies": { - "punycode": "^2.1.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "node_modules/remark-lint-fenced-code-flag/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "dependencies": { - "prepend-http": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", + "node_modules/remark-lint-fenced-code-flag/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "dependencies": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, - "bin": { - "uvu": "bin.js" - }, - "engines": { - "node": ">=8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true, - "peer": true - }, - "node_modules/vfile": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.0.tgz", - "integrity": "sha512-Tj44nY/48OQvarrE4FAjUfrv7GZOYzPbl5OD65HxVKwLJKMPU7zmfV8cCgCnzKWnSfYG2f3pxu+ALqs7j22xQQ==", + "node_modules/remark-lint-fenced-code-marker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-4.0.0.tgz", + "integrity": "sha512-WFN88Rx78m4/HSbW3Kx2XAYbVfzYns4bJd9qpwDD90DA3nc59zciYd01xi6Bk3n9vSs5gIlmG7xkwxVHHJ8KCA==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "node_modules/remark-lint-fenced-code-marker/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "@types/unist": "*" + } + }, + "node_modules/remark-lint-fenced-code-marker/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-fenced-code-marker/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-message": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.0.tgz", - "integrity": "sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-reporter": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.3.tgz", - "integrity": "sha512-q+ruTWxFHbow359TDqoNJn5THdwRDeV+XUOtzdT/OESgaGw05CjL68ImlbzRzqS5xL62Y1IaIWb8x+RbaNjayA==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, "dependencies": { - "@types/supports-color": "^8.0.0", - "string-width": "^5.0.0", - "supports-color": "^9.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-sort": "^3.0.0", - "vfile-statistics": "^2.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-reporter/node_modules/supports-color": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", - "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "engines": { - "node": ">=12" + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-sort": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", - "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "dependencies": { - "vfile-message": "^3.0.0" + "@types/unist": "^3.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/vfile-statistics": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", - "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "node_modules/remark-lint-fenced-code-marker/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "dependencies": { - "vfile-message": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" } }, - "node_modules/weasel-words": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/weasel-words/-/weasel-words-0.1.1.tgz", - "integrity": "sha1-cTeUZYXHP+RIggE4U70ADF1oek4=", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/remark-lint-fenced-code-marker/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, "dependencies": { - "isexe": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "node_modules/remark-lint-fenced-code-marker/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/remark-lint-file-extension": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-3.0.0.tgz", + "integrity": "sha512-wrOKiGvcl/ftB7FkeX2/l13ALvhKXV77HGR8AXo86cVY2pD+K0WdOC52DV3ldgpUXpWzE9kcgF8bbkxwzKpFFg==", "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "quotation": "^2.0.0", + "unified-lint-rule": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/wrapped": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", - "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "node_modules/remark-lint-file-extension/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, "dependencies": { - "co": "3.1.0", - "sliced": "^1.0.1" + "@types/unist": "*" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "node_modules/remark-lint-file-extension/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "node_modules/write-good": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/write-good/-/write-good-1.0.8.tgz", - "integrity": "sha512-P1Ct7+DNrOcr2JAxDZ3Q5i5sx2LSveu7iLaoUL0A+YiG0GKf0l5+9j3rwMeyh6JeTL1+HfQV1rnwEvzhNIvpFw==", + "node_modules/remark-lint-file-extension/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, "dependencies": { - "adverb-where": "^0.2.2", - "commander": "^2.19.0", - "e-prime": "^0.10.4", - "no-cliches": "^0.3.0", - "passive-voice": "^0.1.0", - "too-wordy": "^0.3.1", - "weasel-words": "^0.1.1" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" }, - "bin": { - "write-good": "bin/write-good.js", - "writegood": "bin/write-good.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-file-extension/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, - "engines": { - "node": ">=6", - "npm": ">=5" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/yallist": { + "node_modules/remark-lint-file-extension/node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/zwitch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", - "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.7.tgz", - "integrity": "sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw==", + "node_modules/remark-lint-file-extension/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "node_modules/remark-lint-file-extension/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "requires": { - "regenerator-runtime": "^0.13.4" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@babel/runtime-corejs3": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", + "node_modules/remark-lint-final-definition": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-4.0.1.tgz", + "integrity": "sha512-51T9oSdA7wuhjSdgGo0snO1BY39Igt9cJQi7XpgtgFsbfQk8zSSAUAc/rLabY6+YCTpcPs6qmwvLXZ4mPX6Qlg==", "dev": true, - "peer": true, - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "node_modules/remark-lint-final-definition/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "peer": true - } + "@types/unist": "*" } }, - "@humanwhocodes/config-array": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", - "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "node_modules/remark-lint-final-definition/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-final-definition/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "node_modules/remark-lint-final-definition/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", - "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==", - "dev": true - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "@types/ms": "*" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "@types/estree-jsx": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-0.0.1.tgz", - "integrity": "sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==", + "node_modules/remark-lint-final-definition/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "@types/estree": "*" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@types/is-empty": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.1.tgz", - "integrity": "sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==", - "dev": true + "node_modules/remark-lint-final-definition/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "@types/js-yaml": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.5.tgz", - "integrity": "sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==", - "dev": true + "node_modules/remark-lint-final-definition/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "node_modules/remark-lint-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-3.0.0.tgz", + "integrity": "sha512-NaPyn6FiOn3IV/6gIcwWfJmgraPT2IaVLjhakfPglZkKVfn/FrOfETyY8Bp+HLoSRI9967OH0yRDnK7/pPIWeQ==", "dev": true, - "peer": true + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "vfile-location": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "node_modules/remark-lint-final-newline/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "requires": { + "dependencies": { "@types/unist": "*" } }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "node_modules/remark-lint-final-newline/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "@types/nlcst": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.0.tgz", - "integrity": "sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==", + "node_modules/remark-lint-final-newline/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "@types/unist": "*" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "@types/node": { - "version": "17.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz", - "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==", - "dev": true - }, - "@types/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", - "dev": true - }, - "@types/text-table": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.2.tgz", - "integrity": "sha512-dGoI5Af7To0R2XE8wJuc6vwlavWARsCh3UKJPjWs1YEqGUqfgBI/j/4GX0yf19/DsDPPf0YAXWAp8psNeIehLg==", - "dev": true - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "dev": true - }, - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "node_modules/remark-lint-final-newline/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "node_modules/remark-lint-final-newline/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, - "requires": {} + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "adverb-where": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/adverb-where/-/adverb-where-0.2.5.tgz", - "integrity": "sha512-JiQe2U1UR8l10jPrXv/PmlDhOLZpsxqjvTp+k6Dm5wYDUULdMZytDRmovkXU8X6V9o0sg0FBdetv3VXHAZZK5Q==", - "dev": true + "node_modules/remark-lint-final-newline/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/remark-lint-final-newline/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/remark-lint-hard-break-spaces": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-4.0.0.tgz", + "integrity": "sha512-zCTq7/xfM0ZL3bMopXse9DH2nk38wE1LrxmYwnTrqASBLnEAJWE2U2//tRGVMEBfSAnNvmIo96twz6zkLWjbGA==", "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "color-convert": "^2.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "node_modules/remark-lint-hard-break-spaces/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "node_modules/remark-lint-hard-break-spaces/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "node_modules/remark-lint-heading-increment": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz", + "integrity": "sha512-TARnsjXWzY/yLwxh/y4+KnDSXO3Koue8Crp55T8G9pjj3vw+XgTAG35zSpIIY9HmGiQ2a3R0SOj2pAxATpnckg==", "dev": true, - "peer": true + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "node_modules/remark-lint-heading-increment/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/remark-lint-heading-increment/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/remark-lint-heading-increment/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/remark-lint-heading-increment/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "fill-range": "^7.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/remark-lint-heading-increment/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "builtins": { + "node_modules/remark-lint-heading-increment/node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.0.0.tgz", - "integrity": "sha512-qC0E2Dxgou1IHhvJSLwGDSTvokbRovU5zZFuDY6oY8Y2lF3nGt5Ad8YZK7GMtqzY84Wu7pXTPeHQeHcXSXsRhw==", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "semver": "^7.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "node_modules/remark-lint-heading-increment/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "node_modules/remark-lint-heading-increment/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/remark-lint-heading-increment/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true + "node_modules/remark-lint-heading-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz", + "integrity": "sha512-dQ6Jul5K0+aNUvrq4W7H0+osSoC9hsmwHZqBFq000+eMP/hWJqI8tuudw1rap8HHYuOsKLRbB5q+Fr7G+3Vw+Q==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-heading-style": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/remark-lint-heading-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "dependencies": { + "@types/unist": "*" } }, - "character-entities": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", - "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==", + "node_modules/remark-lint-heading-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "check-links": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/check-links/-/check-links-1.1.8.tgz", - "integrity": "sha512-lxt1EeQ1CVkmiZzPfbPufperYK0t7MvhdLs3zlRH9areA6NVT1tcGymAdJONolNWQBdCFU/sek59RpeLmVHCnw==", + "node_modules/remark-lint-heading-style/node_modules/mdast-util-heading-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-3.0.0.tgz", + "integrity": "sha512-tsUfM9Kj9msjlemA/38Z3pvraQay880E3zP2NgIthMoGcpU9bcPX9oSM6QC/+eFXGGB4ba+VCB1dKAPHB7Veug==", "dev": true, - "requires": { - "got": "^9.6.0", - "is-relative-url": "^2.0.0", - "p-map": "^2.0.0", - "p-memoize": "^2.1.0" + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "node_modules/remark-lint-heading-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "node_modules/remark-lint-heading-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "mimic-response": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/remark-lint-heading-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "color-name": "~1.1.4" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "node_modules/remark-lint-heading-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "core-js-pure": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz", - "integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==", + "node_modules/remark-lint-heading-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/remark-lint-heading-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "node_modules/remark-lint-heading-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/remark-lint-heading-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "ms": "2.1.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "decode-named-character-reference": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz", - "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==", + "node_modules/remark-lint-heading-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-whitespace/-/remark-lint-heading-whitespace-1.0.0.tgz", + "integrity": "sha512-DykoBIXNbkihg64D+mztSOv3l82RTH4tIZW/HUB4QM4NpIEB+pVIPQpCYD0K4pTgvKiwoqsj4NY8qJ1EhNHAmQ==", "dev": true, - "requires": { - "character-entities": "^2.0.0" + "dependencies": { + "mdast-util-to-string": "^1.0.4", + "unified-lint-rule": "^1.0.2", + "unist-util-visit": "^1.3.0" } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "node_modules/remark-lint-heading-whitespace/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true, - "requires": { - "mimic-response": "^1.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/remark-lint-heading-whitespace/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, - "peer": true + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", "dev": true }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, - "peer": true, - "requires": { - "object-keys": "^1.0.12" + "dependencies": { + "unist-util-visit-parents": "^2.0.0" } }, - "dequal": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", - "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", + "node_modules/remark-lint-heading-whitespace/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" + "dependencies": { + "unist-util-is": "^3.0.0" } }, - "dns-socket": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz", - "integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==", + "node_modules/remark-lint-link-title-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-4.0.0.tgz", + "integrity": "sha512-cihTO5dkhjMj/evYIDAvRdQHD82OQeF4fNAq8FLb81HmFKo77VlSF6CK55H1bvlZogfJG58uN/5d1tSsOdcEbg==", "dev": true, - "requires": { - "dns-packet": "^5.2.4" + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/remark-lint-link-title-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "@types/unist": "*" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "e-prime": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/e-prime/-/e-prime-0.10.4.tgz", - "integrity": "sha512-tzBmM2mFSnAq5BuxPSyin6qXb3yMe1wufJN7L7ZPcEWS5S+jI2dhKQEoqHVEcSMMXo/j5lcWpX5jzA6wLSmX6w==", - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "node_modules/remark-lint-link-title-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/remark-lint-link-title-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/remark-lint-link-title-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true, - "requires": { - "ansi-colors": "^4.1.1" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/remark-lint-link-title-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "node_modules/remark-lint-link-title-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/remark-lint-link-title-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/remark-lint-link-title-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true - }, - "eslint": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", - "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", - "dev": true, - "peer": true, - "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.3.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.2.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "peer": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "peer": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "peer": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "node_modules/remark-lint-link-title-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - } + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "eslint-module-utils": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", - "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "node_modules/remark-lint-link-title-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "peer": true, - "requires": { - "ms": "^2.1.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "peer": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "peer": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "peer": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "peer": true - } + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "node_modules/remark-lint-list-item-bullet-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-5.0.0.tgz", + "integrity": "sha512-qq22QaxsDjfsL7aWGIPmP3P0N99CJBQQW1+iSrhYAMCDzqVlw6I3wPNAeR6s8mcoeHT8YlT6eQH3V8xJ0SlW6w==", "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", - "has": "^1.0.3", - "is-core-module": "^2.8.0", - "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" - }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "peer": true, - "requires": { - "ms": "2.0.0" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "peer": true - } + "@types/mdast": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true, - "requires": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" + "dependencies": { + "@types/unist": "*" } }, - "eslint-plugin-react": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", - "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", - "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "peer": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "peer": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", - "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", - "dev": true, - "peer": true, - "requires": {} + "node_modules/remark-lint-list-item-bullet-indent/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true }, - "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "eslint-utils": { + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unified-lint-rule": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "peer": true - } + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "eslint-visitor-keys": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", - "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, - "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.1.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/remark-lint-list-item-bullet-indent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.2.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/remark-lint-list-item-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-4.0.0.tgz", + "integrity": "sha512-L4GZgWQQ54qWKbnDle3dbEOtnq+qdmZJ70lpM3yMFEMHs4xejqPKsIoiYeUtIV0rYHHCWS7IlLzcgYUK9vENQw==", "dev": true, - "peer": true + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/remark-lint-list-item-content-indent/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "extend": { + "node_modules/remark-lint-list-item-content-indent/node_modules/@types/unist": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/remark-lint-list-item-content-indent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/remark-lint-list-item-content-indent/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "node_modules/remark-lint-list-item-content-indent/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "node_modules/remark-lint-list-item-content-indent/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "requires": { - "format": "^0.2.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true + "node_modules/remark-lint-list-item-content-indent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "file-entry-cache": { + "node_modules/remark-lint-list-item-content-indent/node_modules/unist-util-visit-parents": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, - "requires": { - "flat-cache": "^3.0.4" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/remark-lint-list-item-content-indent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "requires": { - "to-regex-range": "^5.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/remark-lint-list-item-content-indent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "locate-path": "^3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/remark-lint-list-item-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-4.0.0.tgz", + "integrity": "sha512-Yd6/g8CH9e4vlPAPNgl7F575uKhP+pTo/qwGkE61GOcgEVNJ/529hjumUhyQ4sOAX0YAPAjxvq6fJvb4AhVOOA==", "dev": true, - "peer": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "node_modules/remark-lint-list-item-indent/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "node_modules/remark-lint-list-item-indent/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "node_modules/remark-lint-list-item-indent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/remark-lint-list-item-indent/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "optional": true + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/remark-lint-list-item-indent/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "pump": "^3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "node_modules/remark-lint-list-item-indent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==", - "dev": true + "node_modules/remark-lint-list-item-indent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/remark-lint-list-item-spacing": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-5.0.0.tgz", + "integrity": "sha512-d6p+1tcwNE+Pp6Tu2DwiKlyC1zYY3f1igL6AlcBIH0RmROVEfZR4IDFH/LcVyTkzqh1lPMFAJXWK4bpScpcO3g==", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/remark-lint-list-item-spacing/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "requires": { - "is-glob": "^4.0.1" + "dependencies": { + "@types/unist": "*" } }, - "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "node_modules/remark-lint-list-item-spacing/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-list-item-spacing/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, - "requires": { - "type-fest": "^0.20.2" - }, "dependencies": { - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "peer": true - } + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "node_modules/remark-lint-list-item-spacing/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/remark-lint-list-item-spacing/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true, - "requires": { - "function-bind": "^1.1.1" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "node_modules/remark-lint-list-item-spacing/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "has-flag": { + "node_modules/remark-lint-list-item-spacing/node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/remark-lint-list-item-spacing/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "node_modules/remark-lint-list-item-spacing/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "requires": { - "lru-cache": "^6.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/remark-lint-list-item-spacing/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "import-meta-resolve": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz", - "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==", + "node_modules/remark-lint-maximum-heading-length": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-4.0.0.tgz", + "integrity": "sha512-UCQxUd0zZyi6RUbpoK5KsxC50ppVqVk0hSgrSPot4wB6PHRgYMALU2fDkEcAjLDc/Y2TayG3IaZEKdqe+84Cwg==", "dev": true, - "requires": { - "builtins": "^4.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/remark-lint-maximum-heading-length/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/remark-lint-maximum-heading-length/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/remark-lint-maximum-heading-length/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "node_modules/remark-lint-maximum-heading-length/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/remark-lint-maximum-heading-length/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true, - "requires": { - "has-bigints": "^1.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/remark-lint-maximum-heading-length/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "binary-extensions": "^2.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/remark-lint-maximum-heading-length/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "node_modules/remark-lint-maximum-heading-length/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "node_modules/remark-lint-maximum-heading-length/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, - "requires": { - "has": "^1.0.3" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/remark-lint-maximum-heading-length/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-empty": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", - "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/remark-lint-maximum-heading-length/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "node_modules/remark-lint-maximum-line-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-4.0.1.tgz", + "integrity": "sha512-hQlh8UrRfhkO4FU7z7t1Bu5ethj1y2iBncO5AOWF38RAmlHaZdB2lQxNA8IvUZITGJYpT1aThdFTEf+58lv08Q==", "dev": true, - "requires": { - "ip-regex": "^4.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "node_modules/remark-lint-maximum-line-length/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "*" + } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/remark-lint-maximum-line-length/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "node_modules/remark-lint-maximum-line-length/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-online": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/is-online/-/is-online-8.5.1.tgz", - "integrity": "sha512-RKyTQx/rJqw2QOXHwy7TmXdlkpe0Hhj7GBsr6TQJaj4ebNOfameZCMspU5vYbwBBzJ2brWArdSvNVox6T6oCTQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "p-any": "^2.0.0", - "p-timeout": "^3.0.0", - "public-ip": "^4.0.1" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "dev": true + "node_modules/remark-lint-maximum-line-length/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-relative-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-2.0.0.tgz", - "integrity": "sha1-cpAtf+BLPUeS59sV+duEtyBMnO8=", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "requires": { - "is-absolute-url": "^2.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, - "peer": true, - "requires": { - "has-tostringtag": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/remark-lint-maximum-line-length/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true, - "requires": { - "has-symbols": "^1.0.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/remark-lint-maximum-line-length/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "node_modules/remark-lint-maximum-line-length/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/remark-lint-no-auto-link-without-protocol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.1.2.tgz", + "integrity": "sha512-mPIdFOGxdDhCMa2qIzjzjDzDoQeyK+/1BBgsseqThuBtoAoXR5l1TZfII2isNbBo6L8d+fMFdx1/3qALoDjtcA==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/remark-lint-no-blockquote-without-marker": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-6.0.0.tgz", + "integrity": "sha512-fBhoTpkWcl5tG4FdwPdJIyb8XLrdr6MdLk1+K2BQ6Rom3rRsIYvuox4ohxOunNrXuth8xyw8kC6wDmODR44oFw==", "dev": true, - "requires": { - "argparse": "^2.0.1" + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-directive": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "minimist": "^1.2.5" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true, - "requires": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "json-buffer": "3.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "language-subtag-registry": "~0.3.2" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "levenshtein-edit-distance": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/levenshtein-edit-distance/-/levenshtein-edit-distance-1.0.0.tgz", - "integrity": "sha1-iVuvR4zOi1waDSfkXXwdl4pmHkk=", - "dev": true + "node_modules/remark-lint-no-blockquote-without-marker/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/remark-lint-no-consecutive-blank-lines": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-5.0.0.tgz", + "integrity": "sha512-HsDZbFlelBVO3mEJDXd9v4z0HLB8pqxWnsV+I4ILYFp5lKYf6NxJaLBWFtP1gAg1+95WxityGLkGtYqmicDjpg==", "dev": true, - "peer": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "libnpmconfig": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", - "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "find-up": "^3.0.0", - "ini": "^1.3.5" + "dependencies": { + "@types/unist": "*" } }, - "lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "load-plugin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-4.0.1.tgz", - "integrity": "sha512-4kMi+mOSn/TR51pDo4tgxROHfBHXsrcyEYSGHcJ1o6TtRaP2PsRM5EwmYbj1uiLDvbfA/ohwuSWZJzqGiai8Dw==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "import-meta-resolve": "^1.0.0", - "libnpmconfig": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "locate-path": { + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unified-lint-rule": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "peer": true - }, - "longest-streak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", - "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", - "dev": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, - "peer": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "yallist": "^4.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "p-defer": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-comment-marker": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-2.1.0.tgz", - "integrity": "sha512-/+Cfm8A83PjkqjQDB9iYqHESGuXlriCWAwRGPJjkYmxXrF4r6saxeUlOKNrf+SogTwg9E8uyHRCFHLG6/BAAdA==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "requires": { - "mdast-util-mdx-expression": "^1.1.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-from-markdown": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.2.0.tgz", - "integrity": "sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==", + "node_modules/remark-lint-no-consecutive-blank-lines/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "mdast-util-to-string": "^3.1.0", - "micromark": "^3.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-decode-string": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "uvu": "^0.5.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.0.tgz", - "integrity": "sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw==", + "node_modules/remark-lint-no-dead-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-dead-urls/-/remark-lint-no-dead-urls-1.1.0.tgz", + "integrity": "sha512-it3EZmMQ+hwGhUf60NkXN0mMIFuFkS0cxdbgEbhZ/Fj1PlUBpe3gDBtWJ/sqNwSNvQlNSzpvMQkNHSoAhlsVjA==", "dev": true, - "requires": { - "micromark-extension-frontmatter": "^1.0.0" + "dependencies": { + "check-links": "^1.1.8", + "is-online": "^8.2.1", + "unified-lint-rule": "^1.0.4", + "unist-util-visit": "^2.0.1" + }, + "engines": { + "node": ">=6" } }, - "mdast-util-heading-style": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-2.0.0.tgz", - "integrity": "sha512-q9+WW2hJduW51LgV2r/fcU5wIt2GLFf0yYHxyi0f2aaxnC63ErBSOAJlhP6nbQ6yeG5rTCozbwOi4QNDPKV0zw==", + "node_modules/remark-lint-no-dead-urls/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, - "requires": { - "@types/mdast": "^3.0.0" + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-mdx-expression": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.1.1.tgz", - "integrity": "sha512-RDLRkBFmBKCJl6/fQdxxKL2BqNtoPFoNBmQAlj5ZNKOijIWRKjdhPkeufsUOaexLj+78mhJc+L7d1MYka8/LdQ==", + "node_modules/remark-lint-no-dead-urls/node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, - "requires": { - "@types/estree-jsx": "^0.0.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-markdown": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.2.6.tgz", - "integrity": "sha512-doJZmTEGagHypWvJ8ltinmwUsT9ZaNgNIQW6Gl7jNdsI1QZkTHTimYW561Niy2s8AEPAqEgV0dIh2UOVlSXUJA==", + "node_modules/remark-lint-no-dead-urls/node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", "dev": true, - "requires": { - "@types/mdast": "^3.0.0", + "dependencies": { "@types/unist": "^2.0.0", - "longest-streak": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "micromark-util-decode-string": "^1.0.0", - "unist-util-visit": "^4.0.0", - "zwitch": "^2.0.0" + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-nlcst": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-5.2.1.tgz", - "integrity": "sha512-Xznpj85MsJnLQjBboajOovT2fAAvbbbmYutpFgzLi9pjZEOkgGzjq+t6fHcge8uzZ5uEkj5pigzw2QrnIVq/kw==", + "node_modules/remark-lint-no-dead-urls/node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/nlcst": "^1.0.0", + "dependencies": { "@types/unist": "^2.0.0", - "nlcst-to-string": "^3.0.0", - "unist-util-position": "^4.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0" + "unist-util-is": "^4.0.0" }, - "dependencies": { - "nlcst-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.0.tgz", - "integrity": "sha512-Y8HQWKw/zrHTCnu2zcFBN1dV6vN0NUG7s5fkEj380G8tF3R+vA2KG+tDl2QoHVQCTHGHVXwoni2RQkDSFQb1PA==", - "dev": true, - "requires": { - "@types/nlcst": "^1.0.0" - } - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.1.0.tgz", - "integrity": "sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==", - "dev": true - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "node_modules/remark-lint-no-duplicate-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-4.0.0.tgz", + "integrity": "sha512-21fcOACkCyhNsHkedKlpvqIywYx+5zGR507bW8e59gzdGhTbnBwQ9du4ACmN9jxPTfIBhUVMz0bWezkGrHE7Bg==", "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - }, "dependencies": { - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - } + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.0.10.tgz", - "integrity": "sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "requires": { - "@types/debug": "^4.0.0", - "debug": "^4.0.0", - "decode-named-character-reference": "^1.0.0", - "micromark-core-commonmark": "^1.0.1", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-sanitize-uri": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "dependencies": { + "@types/unist": "*" } }, - "micromark-core-commonmark": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.0.6.tgz", - "integrity": "sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-factory-destination": "^1.0.0", - "micromark-factory-label": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-factory-title": "^1.0.0", - "micromark-factory-whitespace": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-chunked": "^1.0.0", - "micromark-util-classify-character": "^1.0.0", - "micromark-util-html-tag-name": "^1.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "micromark-util-resolve-all": "^1.0.0", - "micromark-util-subtokenize": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.1", - "uvu": "^0.5.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-extension-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz", - "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-factory-destination": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", - "integrity": "sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-factory-label": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.0.2.tgz", - "integrity": "sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-factory-space": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", - "integrity": "sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-factory-title": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.0.2.tgz", - "integrity": "sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-factory-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.0.0.tgz", - "integrity": "sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==", + "node_modules/remark-lint-no-duplicate-definitions/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-character": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.1.0.tgz", - "integrity": "sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==", + "node_modules/remark-lint-no-duplicate-headings": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-4.0.0.tgz", + "integrity": "sha512-FgBU/JCdR5MitHM+hnOcgBGO5ZCNV8epzuHIglFlJeb8ow23YhhNgmGvyk7RGrZrYuU5R9uQq23N4dF0g9atCA==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-chunked": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.0.0.tgz", - "integrity": "sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/unist": "*" } }, - "micromark-util-classify-character": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.0.0.tgz", - "integrity": "sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-duplicate-headings/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-combine-extensions": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.0.0.tgz", - "integrity": "sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-decode-numeric-character-reference": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.0.0.tgz", - "integrity": "sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-decode-string": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.0.2.tgz", - "integrity": "sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "decode-named-character-reference": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-decode-numeric-character-reference": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-encode": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", - "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==", - "dev": true - }, - "micromark-util-html-tag-name": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.0.0.tgz", - "integrity": "sha512-NenEKIshW2ZI/ERv9HtFNsrn3llSPZtY337LID/24WeLqMzeZhBEE6BQ0vS2ZBjshm5n40chKtJ3qjAbVV8S0g==", - "dev": true - }, - "micromark-util-normalize-identifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.0.0.tgz", - "integrity": "sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-resolve-all": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.0.0.tgz", - "integrity": "sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "micromark-util-types": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-sanitize-uri": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.0.0.tgz", - "integrity": "sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "requires": { - "micromark-util-character": "^1.0.0", - "micromark-util-encode": "^1.0.0", - "micromark-util-symbol": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-subtokenize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.0.2.tgz", - "integrity": "sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==", + "node_modules/remark-lint-no-duplicate-headings/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "micromark-util-chunked": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "micromark-util-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.0.1.tgz", - "integrity": "sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==", - "dev": true - }, - "micromark-util-types": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.0.2.tgz", - "integrity": "sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==", - "dev": true + "node_modules/remark-lint-no-emphasis-as-heading": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-4.0.0.tgz", + "integrity": "sha512-JViGYbuO/xzZThK+qVTNjtLM0v1xMTWFTWt2OJzAkDaGS6T9ZB5ZtRVSBFEMG0SF3dvpJwxe+3ABTsuPBdlYsA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "brace-expansion": "^1.1.7" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "nlcst-to-string": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz", - "integrity": "sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==", - "dev": true - }, - "no-cliches": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/no-cliches/-/no-cliches-0.3.4.tgz", - "integrity": "sha512-oUqnng1vhKLaA4GR+OzVbLuZZ7OOguKCtMHxHMiyP8+9mXidKfoCyc030LbAyNI3xcgCHHyitK3Q8wP+w6DwVQ==", - "dev": true, - "requires": {} - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "peer": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "node_modules/remark-lint-no-emphasis-as-heading/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "node_modules/remark-lint-no-empty-sections": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-empty-sections/-/remark-lint-no-empty-sections-4.0.0.tgz", + "integrity": "sha512-Tx1nCu7Dq3dsJ500402sSvM0uVK/6khSuEjx8K8u9aHN+Y4vjL6h88xVzdzCmZq2J2yqyFnvMjG1y7lQv+DRvg==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-visit": "^1.0.0" } }, - "object.hasown": { + "node_modules/remark-lint-no-empty-sections/node_modules/mdast-util-to-string": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", - "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", "dev": true, - "peer": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "node_modules/remark-lint-no-empty-sections/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", "dev": true, - "peer": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", "dev": true, - "requires": { - "wrappy": "1" + "dependencies": { + "unist-util-visit-parents": "^2.0.0" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/remark-lint-no-empty-sections/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", "dev": true, - "peer": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "dependencies": { + "unist-util-is": "^3.0.0" } }, - "p-any": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", - "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", + "node_modules/remark-lint-no-empty-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-empty-url/-/remark-lint-no-empty-url-4.0.0.tgz", + "integrity": "sha512-2zJxrSnL42wGe+CSZepBzoj8d/FeL/QU8GM6TEO/5qGfXwvJD7s2v6q074UJU0CAaWlWRqSxElescwk3yGQddA==", "dev": true, - "requires": { - "p-cancelable": "^2.0.0", - "p-some": "^4.0.0", - "type-fest": "^0.3.0" - }, "dependencies": { - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - } + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "node_modules/remark-lint-no-empty-url/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "node_modules/remark-lint-no-empty-url/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/remark-lint-no-empty-url/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "requires": { - "p-try": "^2.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "p-locate": { + "node_modules/remark-lint-no-empty-url/node_modules/unified-lint-rule": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, - "requires": { - "p-limit": "^2.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - }, - "p-memoize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-2.1.0.tgz", - "integrity": "sha512-c6+a2iV4JyX0r4+i2IBJYO0r6LZAT2fg/tcB6GQbv1uzZsfsmKT7Ej5DRT1G6Wi7XUJSV2ZiP9+YEtluvhCmkg==", + "node_modules/remark-lint-no-empty-url/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "dev": true, - "requires": { - "mem": "^4.0.0", - "mimic-fn": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "p-some": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", - "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", + "node_modules/remark-lint-no-empty-url/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "requires": { - "aggregate-error": "^3.0.0", - "p-cancelable": "^2.0.0" - }, "dependencies": { - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - } + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/remark-lint-no-empty-url/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, - "requires": { - "p-finally": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "node_modules/remark-lint-no-empty-url/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/remark-lint-no-empty-url/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true, - "requires": { - "callsites": "^3.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "parse-json": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-6.0.2.tgz", - "integrity": "sha512-SA5aMiaIjXkAiBrW/yPgLgQAQg42f7K3ACO+2l/zOvtQBwX58DMUsFJXelW2fx3yMBmWOVkR6j1MGsdSbCA4UA==", + "node_modules/remark-lint-no-file-name-articles": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-3.0.0.tgz", + "integrity": "sha512-il4IseupahbV2TVfFjfDVL/EQw7jBWVlMVsv4K2cgl5uPIjiCjFGQypqKnWl6pZDN0oNOs/DE8gBdyuDjldJaA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "error-ex": "^1.3.2", - "json-parse-even-better-errors": "^2.3.1", - "lines-and-columns": "^2.0.2" + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "passive-voice": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/passive-voice/-/passive-voice-0.1.0.tgz", - "integrity": "sha1-Fv+RrkC6DpLEPmcXY/3IQqcCcLE=", + "node_modules/remark-lint-no-file-name-articles/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-file-name-articles/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "path-exists": { + "node_modules/remark-lint-no-file-name-articles/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-articles/node_modules/unified-lint-rule": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "node_modules/remark-lint-no-file-name-articles/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/remark-lint-no-file-name-articles/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "node_modules/remark-lint-no-file-name-articles/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "node_modules/remark-lint-no-file-name-consecutive-dashes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-3.0.0.tgz", + "integrity": "sha512-3vSI1LOQlu8NSCpWLsKELa8dS9HU+YVZE0U43/DNkdEcnZmlJLpTHQjBTMZUHQipRgoOO+TOSyXFyN/H+2lbuQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, - "peer": true + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "propose": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", - "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", + "node_modules/remark-lint-no-file-name-consecutive-dashes/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, - "requires": { - "levenshtein-edit-distance": "^1.0.0" + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "public-ip": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.4.tgz", - "integrity": "sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA==", + "node_modules/remark-lint-no-file-name-irregular-characters": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-3.0.0.tgz", + "integrity": "sha512-DhGreliHNU7lLTARQujsaLAn8fUPY0V+H0LSmOUuowBZPtIRWeNdQhunSp96RvsuYdqAdERXe0WuH58i3pRqrg==", "dev": true, - "requires": { - "dns-socket": "^4.2.2", - "got": "^9.6.0", - "is-ip": "^3.1.0" + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-irregular-characters/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-3.0.0.tgz", + "integrity": "sha512-MXXNHdGB6P46itkf8gRP0kxQL85KfAj9YOOBqNtGsgI/8J5rsyM/rz1Ac20Xe+5C5oGi71+7EO/TExKu/+7dfw==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-mixed-case/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-3.0.0.tgz", + "integrity": "sha512-3kgamCp39mdlCtqF/+JLwwS4VpSj5wvVwRythUfrpW7993I9kF67dBsaU545aEzWSK+UJZqjb40i0m2VfnBRfQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-file-name-outer-dashes/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-5.0.0.tgz", + "integrity": "sha512-psYSlD2BjcVkgpeXOLwPcYFBrbtJWp8E8JX1J4vSfoHPeY6aIxgYxXkf57cjGTApfRL8xawBmMDiF1FgQvpZYg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-content-indent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-5.0.0.tgz", + "integrity": "sha512-JWGIWhaEzH00HywI0DHex92tJ5Mw7l11shQ6/MGhRjYsHMRWcwWcVeOuktVMe/BiQbg0hRoE4+g0z2VgUD6Cqw==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-heading-indent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-indent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-like-paragraph/-/remark-lint-no-heading-like-paragraph-4.0.0.tgz", + "integrity": "sha512-6P22xHF+2omrQUA9ujQ5yBUlZr3goaAxoa1t3wNSIydzqkbgwLS+RlpGsVvilW1Q8h4JgWpB42Zpflat6xr90g==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-like-paragraph/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-4.0.0.tgz", + "integrity": "sha512-7V23C3Q4yX9zEOLZdbv6o8wVxxeWB/F+h9by55zPyk2AwbqF2t2xevnAmN3XFmKZABDTqLwjQxtK6bCVv/S1PQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-heading-punctuation/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-inline-padding": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.2.tgz", + "integrity": "sha512-dGyhWsiqCZS3Slob0EVBUfsFBbdpMIBCvb56LlCgaHbnLsnNYx8PpF/wA5CgsN8BXIbXfRpyPB5cIJwIq5taYg==", + "dev": true, + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-4.0.0.tgz", + "integrity": "sha512-rl/3Ai4Ax9IH/fRpOJZuXk1HgYX6oFTauhmBOilpqbq/YT2kN3FuXaneXdRfKv1bgMdHaLKxHWxGj/mDyA2n8w==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-literal-urls/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-literal-urls/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-4.0.0.tgz", + "integrity": "sha512-JW11iYxza7asDdhQuKfr8SH1u4NBOCQ4U7Ru0HrKCPcT4y/AB1C1il5uMQzbcervgYPBq69xzyQ24+AJeL0t3A==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-multiple-toplevel-headings/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-reference-like-url/-/remark-lint-no-reference-like-url-4.0.0.tgz", + "integrity": "sha512-YkP8qWdrWDr9s8JLbJoC/U5Z0fU7hpa59Nin0i8zEOtD9coiYoI/YtXRKqSXuAKDmweb+JckhqtKuGJS5u77+w==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-reference-like-url/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-repeat-punctuation": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-repeat-punctuation/-/remark-lint-no-repeat-punctuation-0.1.4.tgz", + "integrity": "sha512-JJduCs4FimdBcR1AB576SqIYOjt+7t8OjTnnlZMvjnw7lzkuL0+nNNHyNXVPaK6jxaLjEUhrH2/smU6vZFUT7g==", + "dev": true, + "dependencies": { + "unified-lint-rule": "^1.0.3", + "unist-util-map": "^1.0.4", + "unist-util-to-list-of-char": "^0.1.3" + } + }, + "node_modules/remark-lint-no-repeat-punctuation/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz", + "integrity": "sha512-ye2h8FzjsgqqQV0HHN2g9N4FqI3eD9Gpgu7tU5ADIJyQ3mUJdwBoFn7IlGnpmumR1fb/l6u/AhRavIZxXYqG+Q==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "collapse-white-space": "^2.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shell-dollars/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-4.0.0.tgz", + "integrity": "sha512-YEiCpW5F/8/LZyxlOuVK2L/n0NJ1AB0AJK7oP39OVyEk3Xl7w+JQi6nZ3KiH6REh+PWGqKn6M0KEPL9cT/iAOw==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-image/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-4.0.0.tgz", + "integrity": "sha512-6jka2Zz3I6G2MvDcKrwADYhTOxHMFMK854u1cfBEIH5/XnCCXROtoqiiDtbZw+NJqbmwsBKvGL4t2gnmEJUmgg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-shortcut-reference-link/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-5.0.0.tgz", + "integrity": "sha512-MaLmnzgirpnRiRjWwrsyOX0RmP2eG4YAv169MtsxTVa6O3CpUDwTuTzivudE9L0kVvTlyF9DXEmdyjm85LDyVA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-table-indentation/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-tabs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-4.0.0.tgz", + "integrity": "sha512-rQR7LDdcw047ajB3D+v9uzdB8aZfZtEdlUJvQXKkcVDteWiuXGC3PcIrmM/8n3J/wlFMuwoAaW2IcdlJf8HzXQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "vfile-location": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-tabs/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-tabs/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-tabs/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-tabs/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-tabs/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-tabs/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-tabs/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-5.0.0.tgz", + "integrity": "sha512-O0q8bHpRHK1T85oqO+uep4BkvQnZZp3y+wahDeeLLq9dCJfF56sq6Tt5OOTt1BAOZlpobS3OPQHUiJWYP6hX1w==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-undefined-references/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-4.0.0.tgz", + "integrity": "sha512-YCZ6k575NCTx7mnN+9ls0G6YgMsZHi0LYQqfLW8MNVHBtbpTBvfmk8I39bmsvuKWeBD98weZoXSDqIiIGg+Q/g==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-no-unused-definitions/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz", + "integrity": "sha512-xZ7Xppy5fzACH4b9h1b4lTzVtNY2AlUkNTfl1Oe6cIKN8tk3juFxN0wL2RpktPtSZ7iRIabzFmg6l8WPhlASJA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz", + "integrity": "sha512-7UjNU2Nv9LGEONTU9GPmTVoNoGKD5aL1X2xHzMbSJiTc50bfcazYqZawO+qj1pQ04WPhto1qHnl0HRB5wwSVwA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-ordered-list-marker-value/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-4.0.0.tgz", + "integrity": "sha512-Kt7IHMB5IbLgRFKaFUmB895sV3PTD0MBgN9CvXKxr1wHFF43S6tabjFIBSoQqyJRlhH0S3rK6Lvopofa009gLg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-rule-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-rule-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-rule-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-4.0.0.tgz", + "integrity": "sha512-YcvuzakYhQWdCH+1E30sUY+wyvq+PNa77NZAMAYO/cS/pZczFB+q4Ccttw4Q+No/chX8oMfe0GYtm8dDWLei/g==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-strong-marker/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-strong-marker/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-5.0.0.tgz", + "integrity": "sha512-LNyiHDQZBIOqcQGG1tYsZHW7g0v8OyRmRgDrD5WEsMaAYfM6EiECUokN/Q4py9h4oM/2KUSrdZbtfuZmy87/kA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-cell-padding/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-4.0.0.tgz", + "integrity": "sha512-nx+xpEIWQRLOcq9hIbUIvhSE1NYRmDJmCY3cMoHJ1sIW7dRXMHyWfpWTgu7mpREKwSQdE0q4qnzk8McQQSkIcg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipe-alignment/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-5.0.0.tgz", + "integrity": "sha512-e7jzAScDrt5+eMomh099TZJBN2K9ldDxBu9iYhNu5C0YsdAvnckJkgilsuClxFpmx4LCVYaX0EGbt/hQ3LB3xg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-table-pipes/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-table-pipes/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz", + "integrity": "sha512-XlP4Wr4KJNovyWVv0H5axfUlF23iE9Kt2SxaVq4+ieum5YcMmKE6KsL+aqt3kiJb60SH1u6a0bxKFvdM/9riOA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-unordered-list-marker-style/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-write-good": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remark-lint-write-good/-/remark-lint-write-good-1.2.0.tgz", + "integrity": "sha512-HYiwM16RRBm979yDb/IVwPe1eFhzA1HATe1WucRiYWS10jcPRgJe9FihH7W5uzQFDqX5aRbTtu/yPdq+hPnYkw==", + "dev": true, + "dependencies": { + "nlcst-to-string": "^2.0.0", + "unified-lint-rule": "^1.0.1", + "unist-util-visit": "^1.1.1", + "write-good": "^1.0.2" + } + }, + "node_modules/remark-lint-write-good/node_modules/unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "dependencies": { + "wrapped": "^1.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint-write-good/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/remark-lint-write-good/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/remark-lint-write-good/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/remark-lint/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-lint/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-lint/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-lint/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-message-control": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-8.0.0.tgz", + "integrity": "sha512-brpzOO+jdyE/mLqvqqvbogmhGxKygjpCUCG/PwSCU43+JZQ+RM+sSzkCWBcYvgF3KIAVNIoPsvXjBkzO7EdsYQ==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-comment-marker": "^3.0.0", + "unified-message-control": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-message-control/node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-message-control/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-message-control/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-message-control/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-message-control/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-parse/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-parse/node_modules/unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-consistent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-6.0.0.tgz", + "integrity": "sha512-W3fwxajdietwjnFyTH5x2le63hxWGVOXxIs7KjRqU+5wkkN6ZQyuwPeeomblmS9wQr50fkidhXNHNDyCXtqgxQ==", + "dev": true, + "dependencies": { + "remark-lint": "^10.0.0", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-checkbox-character-style": "^5.0.0", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-emphasis-marker": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", + "remark-lint-link-title-style": "^4.0.0", + "remark-lint-list-item-content-indent": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-consistent/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-preset-lint-consistent/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-consistent/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-consistent/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-consistent/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-markdown-style-guide": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-6.0.0.tgz", + "integrity": "sha512-izsfNTHeqrRP64VWV6OdJnSUDwKFSthMKiiDcu14ODpPV0t7YiotCQWzgc7L4eW9Ctcp4aB4nHNLSuDmwhEWrQ==", + "dev": true, + "dependencies": { + "remark-lint": "^10.0.0", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-definition-case": "^4.0.0", + "remark-lint-definition-spacing": "^4.0.0", + "remark-lint-emphasis-marker": "^4.0.0", + "remark-lint-fenced-code-flag": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-file-extension": "^3.0.0", + "remark-lint-final-definition": "^4.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-heading-increment": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", + "remark-lint-link-title-style": "^4.0.0", + "remark-lint-list-item-content-indent": "^4.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-list-item-spacing": "^5.0.0", + "remark-lint-maximum-heading-length": "^4.0.0", + "remark-lint-maximum-line-length": "^4.0.0", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-consecutive-blank-lines": "^5.0.0", + "remark-lint-no-duplicate-headings": "^4.0.0", + "remark-lint-no-emphasis-as-heading": "^4.0.0", + "remark-lint-no-file-name-articles": "^3.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^3.0.0", + "remark-lint-no-file-name-irregular-characters": "^3.0.0", + "remark-lint-no-file-name-mixed-case": "^3.0.0", + "remark-lint-no-file-name-outer-dashes": "^3.0.0", + "remark-lint-no-heading-punctuation": "^4.0.0", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-multiple-toplevel-headings": "^4.0.0", + "remark-lint-no-shell-dollars": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-shortcut-reference-link": "^4.0.0", + "remark-lint-no-table-indentation": "^5.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "remark-lint-table-pipe-alignment": "^4.0.0", + "remark-lint-table-pipes": "^5.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-markdown-style-guide/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-preset-lint-markdown-style-guide/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-markdown-style-guide/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-markdown-style-guide/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-markdown-style-guide/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-recommended": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-7.0.0.tgz", + "integrity": "sha512-A9aPDL78OO12xG2a83DVd+M2QzdBMjn545fbXj40BFJdpt9t//MADkPAwRfpMCBkKi+iECPUTFCb3Jm8SsFG2w==", + "dev": true, + "dependencies": { + "remark-lint": "^10.0.0", + "remark-lint-final-newline": "^3.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-list-item-bullet-indent": "^5.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-duplicate-definitions": "^4.0.0", + "remark-lint-no-heading-content-indent": "^5.0.0", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-shortcut-reference-link": "^4.0.0", + "remark-lint-no-undefined-references": "^5.0.0", + "remark-lint-no-unused-definitions": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-recommended/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/remark-preset-lint-recommended/node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-recommended/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-recommended/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-preset-lint-recommended/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-retext": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-6.0.0.tgz", + "integrity": "sha512-VYs0p+3G4DKm/KtWx7LV8YPbyX4CjBf1SZcEk2usEv3QK6JK4g5EfurDAPUmGVZOx/NcqOiNbozfGqpl2HQfTA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/nlcst": "^2.0.0", + "mdast-util-to-nlcst": "^7.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-retext/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-retext/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-retext/node_modules/unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-retext/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-retext/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-retext/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-stringify/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-stringify/node_modules/unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-textr": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-textr/-/remark-textr-6.1.0.tgz", + "integrity": "sha512-3A61/6Dn8x5wS7f9BubnIjwZfttEw9+PWVFtwOvRzKXLmZDV1mgi9MJeaQ9BNzWhojsSRHWLNa2JHKCOOI5DfA==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0", + "textr": "^0.3.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-textr/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-textr/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-textr/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-textr/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-textr/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-13.0.1.tgz", + "integrity": "sha512-GWDZWJAQU0+Fsm1GCLNeJoVcE9L3XTVrWCgQZOYREfXqRFIYaSoIBbARZizLm/vBESq+a3GwEBnIflSCNw26tw==", + "dev": true, + "dependencies": { + "@types/hosted-git-info": "^3.0.0", + "@types/mdast": "^4.0.0", + "github-slugger": "^2.0.0", + "hosted-git-info": "^7.0.0", + "mdast-util-to-hast": "^13.0.0", + "mdast-util-to-string": "^4.0.0", + "propose": "0.0.5", + "trough": "^2.0.0", + "unified-engine": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark-validate-links/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark-validate-links/node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-validate-links/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/remark/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/remark/node_modules/unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", + "dev": true, + "peer": true, + "dependencies": { + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", + "dev": true + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", + "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==", + "dev": true + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/textr": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/textr/-/textr-0.3.0.tgz", + "integrity": "sha1-cXNhKGlirI3za3omGft3OhW5t/c=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/too-wordy": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/too-wordy/-/too-wordy-0.3.4.tgz", + "integrity": "sha512-EU+UA4zHc06TkVQaravNNVdqX763/ENTIOKiKlqSJ6WKCPwLxHjvY3d0uEJYaq92iojyHPwD2iaYbZKjdw3icA==", + "dev": true, + "engines": { + "node": ">=6", + "npm": ">=5" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", + "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unified": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz", + "integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "bail": "^2.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-args": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-11.0.0.tgz", + "integrity": "sha512-4q3OQ2EbNIaxVX1pMoB/QdFxw9BSOWBGUwn5LK3UJict+6i0ud18A1DZ177+2r5hC2nYFOw1jbCp27ydl44Zhg==", + "dev": true, + "dependencies": { + "@types/text-table": "^0.2.0", + "chalk": "^5.0.0", + "chokidar": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "json5": "^2.0.0", + "minimist": "^1.0.0", + "strip-ansi": "^7.0.0", + "text-table": "^0.2.0", + "unified-engine": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-args/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/unified-engine": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-11.1.0.tgz", + "integrity": "sha512-RS3K5PgNjDRQN9eNIefLUDxpfyWIItmKcjBhD1VnYYT/h7xpheZoZBtb5gtwFyKWZlhKCGRVQknIm1M8qHZfIg==", + "dev": true, + "dependencies": { + "@types/concat-stream": "^2.0.0", + "@types/debug": "^4.0.0", + "@types/is-empty": "^1.0.0", + "@types/node": "^20.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "concat-stream": "^2.0.0", + "debug": "^4.0.0", + "glob": "^10.0.0", + "ignore": "^5.0.0", + "is-empty": "^1.0.0", + "is-plain-obj": "^4.0.0", + "load-plugin": "^5.0.0", + "parse-json": "^7.0.0", + "trough": "^2.0.0", + "unist-util-inspect": "^8.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0", + "vfile-reporter": "^8.0.0", + "vfile-statistics": "^3.0.0", + "yaml": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/unified-engine/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unified-engine/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unified-engine/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unified-engine/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-engine/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-lint-rule": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-2.1.1.tgz", + "integrity": "sha512-vsLHyLZFstqtGse2gvrGwasOmH8M2y+r2kQMoDSWzSqUkQx2MjHjvZuGSv5FUaiv4RQO1bHRajy7lSGp7XWq5A==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "trough": "^2.0.0", + "unified": "^10.0.0", + "vfile": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-5.0.0.tgz", + "integrity": "sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/unified-message-control/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified-message-control/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.0.tgz", + "integrity": "sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-inspect": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.0.0.tgz", + "integrity": "sha512-/3Wn/wU6/H6UEo4FoYUeo8KUePN8ERiZpQYFWYoihOsr1DoDuv80PeB0hobVZyYSvALa2e556bG1A1/AbwU4yg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-inspect/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/unist-util-is": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.1.1.tgz", + "integrity": "sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-map": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-map/-/unist-util-map-1.0.5.tgz", + "integrity": "sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1" + } + }, + "node_modules/unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-modify-children/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/unist-util-position": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", + "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position/node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", + "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-to-list-of-char": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/unist-util-to-list-of-char/-/unist-util-to-list-of-char-0.1.3.tgz", + "integrity": "sha512-f8GrLHdhBKfaW6mzJc25BKeUOqhsuiRXlGrXBtb3pmRT3QCuYS+jH4g7Uf52hjV7TLQN4PGnjzrTFMFXAQaprA==", + "dev": true, + "dependencies": { + "unist-util-generated": "^1.1.6", + "unist-util-visit": "^1.4.0" + } + }, + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "dependencies": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "node_modules/unist-util-to-list-of-char/node_modules/unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "dependencies": { + "unist-util-is": "^3.0.0" + } + }, + "node_modules/unist-util-visit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.0.tgz", + "integrity": "sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-children/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/unist-util-visit-parents": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", + "integrity": "sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true, + "peer": true + }, + "node_modules/vfile": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.0.tgz", + "integrity": "sha512-Tj44nY/48OQvarrE4FAjUfrv7GZOYzPbl5OD65HxVKwLJKMPU7zmfV8cCgCnzKWnSfYG2f3pxu+ALqs7j22xQQ==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "node_modules/vfile-location/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.0.tgz", + "integrity": "sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g==", + "dev": true, + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.0.tgz", + "integrity": "sha512-NfHyHdkCcy0BsXiLA3nId29TY7W7hgpc8nd8Soe3imATx5N4/+mkLYdMR+Y6Zvu6BXMMi0FZsD4FLCm1dN85Pg==", + "dev": true, + "dependencies": { + "@types/supports-color": "^8.0.0", + "string-width": "^6.0.0", + "supports-color": "^9.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0", + "vfile-sort": "^4.0.0", + "vfile-statistics": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/vfile-reporter/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/vfile-reporter/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-reporter/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-4.0.0.tgz", + "integrity": "sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==", + "dev": true, + "dependencies": { + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/vfile-sort/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-sort/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-3.0.0.tgz", + "integrity": "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==", + "dev": true, + "dependencies": { + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics/node_modules/@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "node_modules/vfile-statistics/node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics/node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-statistics/node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, + "node_modules/weasel-words": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/weasel-words/-/weasel-words-0.1.1.tgz", + "integrity": "sha1-cTeUZYXHP+RIggE4U70ADF1oek4=", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "peer": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrapped": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", + "integrity": "sha1-x4PZ2Aeyc+mwHoUWgKk4yHyQckI=", + "dev": true, + "dependencies": { + "co": "3.1.0", + "sliced": "^1.0.1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-good": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/write-good/-/write-good-1.0.8.tgz", + "integrity": "sha512-P1Ct7+DNrOcr2JAxDZ3Q5i5sx2LSveu7iLaoUL0A+YiG0GKf0l5+9j3rwMeyh6JeTL1+HfQV1rnwEvzhNIvpFw==", + "dev": true, + "dependencies": { + "adverb-where": "^0.2.2", + "commander": "^2.19.0", + "e-prime": "^0.10.4", + "no-cliches": "^0.3.0", + "passive-voice": "^0.1.0", + "too-wordy": "^0.3.1", + "weasel-words": "^0.1.1" + }, + "bin": { + "write-good": "bin/write-good.js", + "writegood": "bin/write-good.js" + }, + "engines": { + "node": ">=6", + "npm": ">=5" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/zwitch": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", + "integrity": "sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "dev": true, + "peer": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", + "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", + "dev": true, + "peer": true, + "requires": { + "core-js-pure": "^3.20.2", + "regenerator-runtime": "^0.13.4" + } + }, + "@eslint/eslintrc": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "dev": true, + "peer": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.2.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "peer": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.2.tgz", + "integrity": "sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA==", + "dev": true, + "peer": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "peer": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.3.tgz", + "integrity": "sha512-nkalE/f1RvRGChwBnEIoBfSEYOXnCRdleKuv6+lePbMDrMZXeDQnqak5XDOeBgrPPyPfAdcCu/B5z+v3VhplGg==", + "dev": true + }, + "@npmcli/config": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-4.1.0.tgz", + "integrity": "sha512-cPQmIQ2Q0vuOfrenrA3isikdMFMAHgzlXV+EmvZ8f2JeJsU5xTU2bG7ipXECiMvPF9nM+QDnMLuIg8QLw9H4xg==", + "dev": true, + "requires": { + "@npmcli/map-workspaces": "^2.0.2", + "ini": "^3.0.0", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "proc-log": "^2.0.0", + "read-package-json-fast": "^2.0.3", + "semver": "^7.3.5", + "walk-up-path": "^1.0.0" + } + }, + "@npmcli/map-workspaces": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.3.tgz", + "integrity": "sha512-X6suAun5QyupNM8iHkNPh0AHdRC2rb1W+MTdMvvA/2ixgmqZwlq5cGUBgmKHUHT2LgrkKJMAXbfAoTxOigpK8Q==", + "dev": true, + "requires": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@npmcli/name-from-folder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", + "dev": true, + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "*", + "@types/node": "*", + "@types/responselike": "*" + } + }, + "@types/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-t3YCerNM7NTVjLuICZo5gYAXYoDvpuuTceCcFQWcDQz26kxUR5uIWolxbIR5jRNIXpMqhOpW/b8imCR1LEmuJw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "@types/hast": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.1.tgz", + "integrity": "sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/hosted-git-info": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hosted-git-info/-/hosted-git-info-3.0.5.tgz", + "integrity": "sha512-Dmngh7U003cOHPhKGyA7LWqrnvcTyILNgNPmNCxlx7j8MIi54iBliiT8XqVLIQ3GchoOjVAyBzNJVyuaJjqokg==", + "dev": true + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "dev": true + }, + "@types/is-empty": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/is-empty/-/is-empty-1.2.1.tgz", + "integrity": "sha512-a3xgqnFTuNJDm1fjsTjHocYJ40Cz3t8utYpi5GNaxzrJC2HSD08ym+whIL7fNqiqBCdM9bcqD1H/tORWAFXoZw==", + "dev": true + }, + "@types/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true, + "peer": true + }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/mdast": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/nlcst": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-2.0.1.tgz", + "integrity": "sha512-+hL97wfmdLW/unulVgdR+e+8PXbbtZgoYOq3C12H3RKgAZZ38D55Jwej7JBttJ6+oFuwIRYy5qTbE/WugMsCxw==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/node": { + "version": "20.8.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.0.tgz", + "integrity": "sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==", + "dev": true + }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-dPWnWsf+kzIG140B8z2w3fr5D03TLWbOAFQl45xUpI3vcizeXriNR5VYkWZ+WTMsUHqZ9Xlt3hrxGNANFyNQfw==", + "dev": true + }, + "@types/text-table": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@types/text-table/-/text-table-0.2.3.tgz", + "integrity": "sha512-MUW7DN7e178wJ2dB9rHuhwUWRUJGrl8fCng37BEWV0r2r5VpzkRFRiMfnX6sjXlu4tMn41lrjzsVh/z1XrKc+A==", + "dev": true + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "peer": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "adverb-where": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/adverb-where/-/adverb-where-0.2.5.tgz", + "integrity": "sha512-JiQe2U1UR8l10jPrXv/PmlDhOLZpsxqjvTp+k6Dm5wYDUULdMZytDRmovkXU8X6V9o0sg0FBdetv3VXHAZZK5Q==", + "dev": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "peer": true + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "peer": true + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-iterate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/array-iterate/-/array-iterate-2.0.1.tgz", + "integrity": "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "array.prototype.flatmap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0" + } + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true, + "peer": true + }, + "axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true, + "peer": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true, + "peer": true + }, + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true + }, + "cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true + }, + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "character-entities": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.1.tgz", + "integrity": "sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==", + "dev": true + }, + "character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "dev": true + }, + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true + }, + "character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true + }, + "check-links": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/check-links/-/check-links-1.1.8.tgz", + "integrity": "sha512-lxt1EeQ1CVkmiZzPfbPufperYK0t7MvhdLs3zlRH9areA6NVT1tcGymAdJONolNWQBdCFU/sek59RpeLmVHCnw==", + "dev": true, + "requires": { + "got": "^11.8.5", + "is-relative-url": "^2.0.0", + "p-map": "^2.0.0", + "p-memoize": "^2.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + }, + "collapse-white-space": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", + "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "compress-brotli": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz", + "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==", + "dev": true, + "requires": { + "@types/json-buffer": "~3.0.0", + "json-buffer": "~3.0.1" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true, + "peer": true + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "core-js-pure": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.20.2.tgz", + "integrity": "sha512-CmWHvSKn2vNL6p6StNp1EmMIfVY/pqn3JLAjfZQ8WZGPOlGoO92EkX9/Mk81i6GxvoPXjUqEQnpM3rJ5QxxIOg==", + "dev": true, + "peer": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "peer": true + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-named-character-reference": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.1.tgz", + "integrity": "sha512-YV/0HQHreRwKb7uBopyIkLG17jG6Sv2qUchk9qSoVJ2f+flwRsPNBO0hAnjt6mTNYUT+vw9Gy2ihXg4sUWPi2w==", + "dev": true, + "requires": { + "character-entities": "^2.0.0" + } + }, + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "requires": { + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "peer": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "dequal": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz", + "integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==", + "dev": true + }, + "devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "requires": { + "dequal": "^2.0.0" + } + }, + "dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dns-socket": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz", + "integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.4" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "e-prime": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/e-prime/-/e-prime-0.10.4.tgz", + "integrity": "sha512-tzBmM2mFSnAq5BuxPSyin6qXb3yMe1wufJN7L7ZPcEWS5S+jI2dhKQEoqHVEcSMMXo/j5lcWpX5jzA6wLSmX6w==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "peer": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "peer": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "peer": true + }, + "eslint": { + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.6.0.tgz", + "integrity": "sha512-UvxdOJ7mXFlw7iuHZA4jmzPaUqIw54mZrv+XPYKNbKdLR0et4rf60lIZUU9kiNtnzzMzGWxMV+tQ7uG7JG8DPw==", + "dev": true, + "peer": true, + "requires": { + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.1.0", + "espree": "^9.3.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.2.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "peer": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "peer": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "peer": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "peer": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.2.tgz", + "integrity": "sha512-zquepFnWCY2ISMFwD/DqzaM++H+7PDzOpUvotJWm/y1BAFt5R4oeULgdrTejKqLkz7MA/tgstsUMNYc7wNdTrg==", + "dev": true, + "peer": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "peer": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "peer": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "peer": true + } + } + }, + "eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "peer": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "peer": true + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "peer": true, + "requires": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + } + }, + "eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "peer": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "peer": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true, + "peer": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "peer": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "peer": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz", + "integrity": "sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA==", + "dev": true, + "peer": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "peer": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true, + "peer": true + }, + "fault": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", + "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", + "dev": true, + "requires": { + "format": "^0.2.0" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "peer": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true, + "peer": true + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "format": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", + "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true, + "peer": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true, + "peer": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", + "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "dev": true, + "peer": true, + "requires": { + "type-fest": "^0.20.2" + }, + "dependencies": { + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "peer": true + } + } + }, + "got": { + "version": "11.8.5", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.5.tgz", + "integrity": "sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ==", + "dev": true, + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "peer": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "peer": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "peer": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "peer": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "hosted-git-info": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.1.tgz", + "integrity": "sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==", + "dev": true, + "requires": { + "lru-cache": "^10.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + } + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-meta-resolve": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.0.3.tgz", + "integrity": "sha512-fpAppnBpZ3ymQ/dPP97TNsco1HB5+V9SYJ3chY50PP8xn4U/w+Y6ovWBmTImB/prmGsTjzPh8pQYY+EVBlr9mw==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "peer": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "peer": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true + }, + "is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "dev": true, + "requires": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "peer": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "peer": true + }, + "is-core-module": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", + "dev": true, + "peer": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "peer": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true + }, + "is-empty": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-empty/-/is-empty-1.2.0.tgz", + "integrity": "sha1-3pu1snhzigWgsJpX4ftNSjQan2s=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "dev": true + }, + "is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "requires": { + "ip-regex": "^4.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "peer": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "peer": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-online": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/is-online/-/is-online-8.5.1.tgz", + "integrity": "sha512-RKyTQx/rJqw2QOXHwy7TmXdlkpe0Hhj7GBsr6TQJaj4ebNOfameZCMspU5vYbwBBzJ2brWArdSvNVox6T6oCTQ==", + "dev": true, + "requires": { + "got": "^11.8.5", + "p-any": "^2.0.0", + "p-timeout": "^3.0.0", + "public-ip": "^4.0.1" + } + }, + "is-plain-obj": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", + "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", + "dev": true + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-relative-url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-relative-url/-/is-relative-url-2.0.0.tgz", + "integrity": "sha1-cpAtf+BLPUeS59sV+duEtyBMnO8=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "peer": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "peer": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "peer": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true, + "peer": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "peer": true, + "requires": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + } + }, + "keyv": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.4.1.tgz", + "integrity": "sha512-PzByhNxfBLnSBW2MZi1DF+W5+qB/7BMpOokewqIvqS8GFtP7xHm2oeGU72Y1fhtfOv/FiEnI4+nyViYDmUChnw==", + "dev": true, + "requires": { + "compress-brotli": "^1.3.8", + "json-buffer": "3.0.1" + } + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true, + "peer": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "peer": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "levenshtein-edit-distance": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/levenshtein-edit-distance/-/levenshtein-edit-distance-1.0.0.tgz", + "integrity": "sha1-iVuvR4zOi1waDSfkXXwdl4pmHkk=", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "peer": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true + }, + "load-plugin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/load-plugin/-/load-plugin-5.0.0.tgz", + "integrity": "sha512-jTz8tvC0BTMtof27lTSV5SAOnCRT0Z++k+S3QeQ5CrF8ZAS5L2nhi3euf4ZhJyDkds+nOQGyPcFqdQZ9s8ELkg==", + "dev": true, + "requires": { + "@npmcli/config": "^4.0.0", + "import-meta-resolve": "^2.0.0" + } + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "peer": true + }, + "longest-streak": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.0.1.tgz", + "integrity": "sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "peer": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "markdown-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", + "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", + "dev": true + }, + "mdast-comment-marker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-comment-marker/-/mdast-comment-marker-3.0.0.tgz", + "integrity": "sha512-bt08sLmTNg00/UtVDiqZKocxqvQqqyQZAg1uaRuO/4ysXV5motg7RolF5o5yy/sY1rG0v2XgZEqFWho1+2UquA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-mdx-expression": "^2.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + } + } + }, + "mdast-util-directive": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", + "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + } + } + }, + "mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + } + } + }, + "mdast-util-frontmatter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", + "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "escape-string-regexp": "^5.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + } + } + }, + "mdast-util-mdx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", + "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + } + }, + "mdast-util-mdx-expression": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz", + "integrity": "sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==", + "dev": true, + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + } + } + }, + "mdast-util-mdx-jsx": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.2.tgz", + "integrity": "sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==", + "dev": true, + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-remove-position": "^5.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "dev": true, + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + } + } + }, + "mdast-util-phrasing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.0.0.tgz", + "integrity": "sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + } + } + }, + "mdast-util-to-hast": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", + "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", + "dev": true, + "requires": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + } + } + }, + "mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + } + } + }, + "mdast-util-to-nlcst": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-nlcst/-/mdast-util-to-nlcst-7.0.0.tgz", + "integrity": "sha512-YfWgABD6izaK7Tzx37V4268THKeusHU+S2qet98h9vrffMxwd/2jqFKxNYz9cCAPYA8p/5BXQuF313JuVFDC9A==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^3.0.0", + "unist-util-position": "^5.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "nlcst-to-string": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-3.1.1.tgz", + "integrity": "sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==", + "dev": true, + "requires": { + "@types/nlcst": "^1.0.0" + }, + "dependencies": { + "@types/nlcst": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/nlcst/-/nlcst-1.0.2.tgz", + "integrity": "sha512-ykxL/GDDUhqikjU0LIywZvEwb1NTYXTEWf+XgMSS2o6IXIakafPccxZmxgZcvJPZ3yFl2kdL1gJZz3U3iZF3QA==", + "dev": true, + "requires": { + "@types/unist": "^2" + } + }, + "@types/unist": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==", + "dev": true + } + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "mdast-util-to-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz", + "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + } + } + }, + "micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "dev": true, + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "dev": true, + "requires": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-extension-frontmatter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", + "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", + "dev": true, + "requires": { + "fault": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "dev": true, + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "dev": true, + "requires": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "dev": true, + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "dev": true, + "requires": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "dev": true, + "requires": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "dev": true, + "requires": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "dev": true, + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "dev": true, + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "dev": true, + "requires": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "dev": true, + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "dev": true, + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "dev": true + }, + "micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "dev": true + }, + "micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "dev": true, + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "dev": true, + "requires": { + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "dev": true, + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "dev": true, + "requires": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "dev": true + }, + "micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true, + "peer": true + }, + "nlcst-to-string": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz", + "integrity": "sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg==", + "dev": true + }, + "no-cliches": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/no-cliches/-/no-cliches-0.3.4.tgz", + "integrity": "sha512-oUqnng1vhKLaA4GR+OzVbLuZZ7OOguKCtMHxHMiyP8+9mXidKfoCyc030LbAyNI3xcgCHHyitK3Q8wP+w6DwVQ==", + "dev": true, + "requires": {} + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "peer": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "peer": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "peer": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "peer": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-any": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", + "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", + "dev": true, + "requires": { + "p-cancelable": "^2.0.0", + "p-some": "^4.0.0", + "type-fest": "^0.3.0" + } + }, + "p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-memoize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-2.1.0.tgz", + "integrity": "sha512-c6+a2iV4JyX0r4+i2IBJYO0r6LZAT2fg/tcB6GQbv1uzZsfsmKT7Ej5DRT1G6Wi7XUJSV2ZiP9+YEtluvhCmkg==", + "dev": true, + "requires": { + "mem": "^4.0.0", + "mimic-fn": "^1.0.0" + } + }, + "p-some": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", + "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0", + "p-cancelable": "^2.0.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + } + }, + "parse-json": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-7.1.0.tgz", + "integrity": "sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.21.4", + "error-ex": "^1.3.2", + "json-parse-even-better-errors": "^3.0.0", + "lines-and-columns": "^2.0.3", + "type-fest": "^3.8.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true + }, + "type-fest": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz", + "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==", + "dev": true + } + } + }, + "parse-latin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse-latin/-/parse-latin-7.0.0.tgz", + "integrity": "sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==", + "dev": true, + "requires": { + "@types/nlcst": "^2.0.0", + "@types/unist": "^3.0.0", + "nlcst-to-string": "^4.0.0", + "unist-util-modify-children": "^4.0.0", + "unist-util-visit-children": "^3.0.0", + "vfile": "^6.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "nlcst-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nlcst-to-string/-/nlcst-to-string-4.0.0.tgz", + "integrity": "sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==", + "dev": true, + "requires": { + "@types/nlcst": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "passive-voice": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/passive-voice/-/passive-voice-0.1.0.tgz", + "integrity": "sha1-Fv+RrkC6DpLEPmcXY/3IQqcCcLE=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "peer": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "peer": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "peer": true + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", + "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", + "dev": true + } + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "peer": true + }, + "proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "peer": true + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "peer": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "propose": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/propose/-/propose-0.0.5.tgz", + "integrity": "sha1-SKBl2ex9TIZn9AULFcSi2F28pWs=", + "dev": true, + "requires": { + "levenshtein-edit-distance": "^1.0.0" + } + }, + "public-ip": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.4.tgz", + "integrity": "sha512-EJ0VMV2vF6Cu7BIPo3IMW1Maq6ME+fbR0NcPmqDfpfNGIRPue1X8QrGjrg/rfjDkOsIkKHIf2S5FlEa48hFMTA==", + "dev": true, + "requires": { + "dns-socket": "^4.2.2", + "got": "^11.8.5", + "is-ip": "^3.1.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "peer": true + }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "quotation": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quotation/-/quotation-2.0.3.tgz", + "integrity": "sha512-yEc24TEgCFLXx7D4JHJJkK4JFVtatO8fziwUxY4nB/Jbea9o9CVS3gt22mA0W7rPYAGW2fWzYDSOtD94PwOyqA==", + "dev": true + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "peer": true + }, + "read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true, + "peer": true + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "peer": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "peer": true + }, + "remark": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-15.0.1.tgz", + "integrity": "sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-cli": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-12.0.1.tgz", + "integrity": "sha512-2NAEOACoTgo+e+YAaCTODqbrWyhMVmlUyjxNCkTrDRHHQvH6+NbrnqVvQaLH/Q8Ket3v90A43dgAJmXv8y5Tkw==", + "dev": true, + "requires": { + "import-meta-resolve": "^4.0.0", + "markdown-extensions": "^2.0.0", + "remark": "^15.0.0", + "unified-args": "^11.0.0" + }, + "dependencies": { + "import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", + "dev": true + } + } + }, + "remark-frontmatter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", + "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-frontmatter": "^2.0.0", + "micromark-extension-frontmatter": "^2.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-heading-gap": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-heading-gap/-/remark-heading-gap-6.0.0.tgz", + "integrity": "sha512-xsJJZ0BC9J6XFY0c7segxuSKrJ95EDHEh06+b5FOgbhyJ9Z7yWKxWEJpsa2Bp4gkeMAEkoODH4mjWIV0JD2Urg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-10.0.0.tgz", + "integrity": "sha512-E8yHHDOJ8b+qI0G49BRu24pe8t0fNNBWv8ENQJpCGNrVeTeyBIGEbaUe1yuF7OG8faA6PVpcN/pqWjzW9fcBWQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "remark-message-control": "^8.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-blockquote-indentation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-4.0.0.tgz", + "integrity": "sha512-hdUvn+KsJbBKpY9jLY01PmfpJ/WGhLu9GJMXQGU8ADXJc+F5DWSgKAr6GQ1IUKqvGYdEML/KZ61WomWFUuecVA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-checkbox-character-style": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-5.0.0.tgz", + "integrity": "sha512-K0G/Nok59fb2q5KUxcemBVt+ymnhTkDVLJAatZ4PAh9At8y0DGctHdU27jWsuvO0Fs7Zy62Usk7IJE2VO89p1w==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-checkbox-content-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-5.0.0.tgz", + "integrity": "sha512-7L25a7TEfdogFSh4HDOnB+GTTTEiXJDMlceUPft9bzIjElI8Hm2+a2D8jUQn4ahj+j/3LmdZW4GjAeyfdPuqTA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-code": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code/-/remark-lint-code-2.0.0.tgz", + "integrity": "sha1-A+DC6Qru2+h1qHlf6s9XmIt9lXw=", + "dev": true, + "requires": { + "unified-lint-rule": "^1.0.0", + "unist-util-visit": "^1.0.0" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } + } + }, + "remark-lint-code-block-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-4.0.0.tgz", + "integrity": "sha512-LKBKMVruEO0tzDnnnqi1TfUcnwY6Mo7cVtZM4E4pKt3KMhtvgU2wD68/MxDOEJd0pmnLrEgIadv74bY0gWhZpg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-definition-case": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-4.0.0.tgz", + "integrity": "sha512-XBmMmj8ii0KZUuJf7ZaVXDGp2+DWE02re9qn/6mV23rBpsDmpz7U1lQWRlwFQIE5q5bxIxP5pX7hDeTH0Egy9Q==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-definition-spacing": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-4.0.0.tgz", + "integrity": "sha512-t6nP8unz6z/DLBTWeOmDFHPFbX3E2PbNgt2fTazRbVnMC6z3o25hBzg5hI6DL0MPt2ZTRX++rJsGRjb+vgh/tQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-emphasis-marker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-4.0.0.tgz", + "integrity": "sha512-xIRiB4PFWUOyIslN/UOPL6Lh+J0VD4R11+jo+W4hpGMNsg58l+2SgtdbinlXzDeoBxmaaka9n/sYpJ7cJWEIPQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-fenced-code-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-4.0.0.tgz", + "integrity": "sha512-Zs0wJd4nRvBo/9NWQVfWg5Ykapbo0Zzw/SyZc3f0h73S1gTZZcfeU+bA5oDivlBdcUgLBsyHRE0QaoaVvN3/Wg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "quotation": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-fenced-code-marker": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-4.0.0.tgz", + "integrity": "sha512-WFN88Rx78m4/HSbW3Kx2XAYbVfzYns4bJd9qpwDD90DA3nc59zciYd01xi6Bk3n9vSs5gIlmG7xkwxVHHJ8KCA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-file-extension": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-3.0.0.tgz", + "integrity": "sha512-wrOKiGvcl/ftB7FkeX2/l13ALvhKXV77HGR8AXo86cVY2pD+K0WdOC52DV3ldgpUXpWzE9kcgF8bbkxwzKpFFg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "quotation": "^2.0.0", + "unified-lint-rule": "^3.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-final-definition": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-4.0.1.tgz", + "integrity": "sha512-51T9oSdA7wuhjSdgGo0snO1BY39Igt9cJQi7XpgtgFsbfQk8zSSAUAc/rLabY6+YCTpcPs6qmwvLXZ4mPX6Qlg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-3.0.0.tgz", + "integrity": "sha512-NaPyn6FiOn3IV/6gIcwWfJmgraPT2IaVLjhakfPglZkKVfn/FrOfETyY8Bp+HLoSRI9967OH0yRDnK7/pPIWeQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "vfile-location": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-hard-break-spaces": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-4.0.0.tgz", + "integrity": "sha512-zCTq7/xfM0ZL3bMopXse9DH2nk38wE1LrxmYwnTrqASBLnEAJWE2U2//tRGVMEBfSAnNvmIo96twz6zkLWjbGA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-heading-increment": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-4.0.0.tgz", + "integrity": "sha512-TARnsjXWzY/yLwxh/y4+KnDSXO3Koue8Crp55T8G9pjj3vw+XgTAG35zSpIIY9HmGiQ2a3R0SOj2pAxATpnckg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-heading-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-4.0.0.tgz", + "integrity": "sha512-dQ6Jul5K0+aNUvrq4W7H0+osSoC9hsmwHZqBFq000+eMP/hWJqI8tuudw1rap8HHYuOsKLRbB5q+Fr7G+3Vw+Q==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-heading-style": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "mdast-util-heading-style": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-heading-style/-/mdast-util-heading-style-3.0.0.tgz", + "integrity": "sha512-tsUfM9Kj9msjlemA/38Z3pvraQay880E3zP2NgIthMoGcpU9bcPX9oSM6QC/+eFXGGB4ba+VCB1dKAPHB7Veug==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-heading-whitespace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-heading-whitespace/-/remark-lint-heading-whitespace-1.0.0.tgz", + "integrity": "sha512-DykoBIXNbkihg64D+mztSOv3l82RTH4tIZW/HUB4QM4NpIEB+pVIPQpCYD0K4pTgvKiwoqsj4NY8qJ1EhNHAmQ==", + "dev": true, + "requires": { + "mdast-util-to-string": "^1.0.4", + "unified-lint-rule": "^1.0.2", + "unist-util-visit": "^1.3.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } + } + }, + "remark-lint-link-title-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-4.0.0.tgz", + "integrity": "sha512-cihTO5dkhjMj/evYIDAvRdQHD82OQeF4fNAq8FLb81HmFKo77VlSF6CK55H1bvlZogfJG58uN/5d1tSsOdcEbg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-list-item-bullet-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-5.0.0.tgz", + "integrity": "sha512-qq22QaxsDjfsL7aWGIPmP3P0N99CJBQQW1+iSrhYAMCDzqVlw6I3wPNAeR6s8mcoeHT8YlT6eQH3V8xJ0SlW6w==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-list-item-content-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-4.0.0.tgz", + "integrity": "sha512-L4GZgWQQ54qWKbnDle3dbEOtnq+qdmZJ70lpM3yMFEMHs4xejqPKsIoiYeUtIV0rYHHCWS7IlLzcgYUK9vENQw==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-list-item-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-4.0.0.tgz", + "integrity": "sha512-Yd6/g8CH9e4vlPAPNgl7F575uKhP+pTo/qwGkE61GOcgEVNJ/529hjumUhyQ4sOAX0YAPAjxvq6fJvb4AhVOOA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-list-item-spacing": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-5.0.0.tgz", + "integrity": "sha512-d6p+1tcwNE+Pp6Tu2DwiKlyC1zYY3f1igL6AlcBIH0RmROVEfZR4IDFH/LcVyTkzqh1lPMFAJXWK4bpScpcO3g==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-maximum-heading-length": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-4.0.0.tgz", + "integrity": "sha512-UCQxUd0zZyi6RUbpoK5KsxC50ppVqVk0hSgrSPot4wB6PHRgYMALU2fDkEcAjLDc/Y2TayG3IaZEKdqe+84Cwg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-maximum-line-length": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-4.0.1.tgz", + "integrity": "sha512-hQlh8UrRfhkO4FU7z7t1Bu5ethj1y2iBncO5AOWF38RAmlHaZdB2lQxNA8IvUZITGJYpT1aThdFTEf+58lv08Q==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-auto-link-without-protocol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.1.2.tgz", + "integrity": "sha512-mPIdFOGxdDhCMa2qIzjzjDzDoQeyK+/1BBgsseqThuBtoAoXR5l1TZfII2isNbBo6L8d+fMFdx1/3qALoDjtcA==", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-position": "^4.0.0", + "unist-util-visit": "^4.0.0" + } + }, + "remark-lint-no-blockquote-without-marker": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-6.0.0.tgz", + "integrity": "sha512-fBhoTpkWcl5tG4FdwPdJIyb8XLrdr6MdLk1+K2BQ6Rom3rRsIYvuox4ohxOunNrXuth8xyw8kC6wDmODR44oFw==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-directive": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-consecutive-blank-lines": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-5.0.0.tgz", + "integrity": "sha512-HsDZbFlelBVO3mEJDXd9v4z0HLB8pqxWnsV+I4ILYFp5lKYf6NxJaLBWFtP1gAg1+95WxityGLkGtYqmicDjpg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-directive": "^3.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-dead-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-dead-urls/-/remark-lint-no-dead-urls-1.1.0.tgz", + "integrity": "sha512-it3EZmMQ+hwGhUf60NkXN0mMIFuFkS0cxdbgEbhZ/Fj1PlUBpe3gDBtWJ/sqNwSNvQlNSzpvMQkNHSoAhlsVjA==", + "dev": true, + "requires": { + "check-links": "^1.1.8", + "is-online": "^8.2.1", + "unified-lint-rule": "^1.0.4", + "unist-util-visit": "^2.0.1" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "dev": true + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + } + } + }, + "remark-lint-no-duplicate-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-4.0.0.tgz", + "integrity": "sha512-21fcOACkCyhNsHkedKlpvqIywYx+5zGR507bW8e59gzdGhTbnBwQ9du4ACmN9jxPTfIBhUVMz0bWezkGrHE7Bg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-duplicate-headings": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-4.0.0.tgz", + "integrity": "sha512-FgBU/JCdR5MitHM+hnOcgBGO5ZCNV8epzuHIglFlJeb8ow23YhhNgmGvyk7RGrZrYuU5R9uQq23N4dF0g9atCA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-emphasis-as-heading": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-4.0.0.tgz", + "integrity": "sha512-JViGYbuO/xzZThK+qVTNjtLM0v1xMTWFTWt2OJzAkDaGS6T9ZB5ZtRVSBFEMG0SF3dvpJwxe+3ABTsuPBdlYsA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-empty-sections": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-empty-sections/-/remark-lint-no-empty-sections-4.0.0.tgz", + "integrity": "sha512-Tx1nCu7Dq3dsJ500402sSvM0uVK/6khSuEjx8K8u9aHN+Y4vjL6h88xVzdzCmZq2J2yqyFnvMjG1y7lQv+DRvg==", + "dev": true, + "requires": { + "mdast-util-to-string": "^1.0.2", + "unified-lint-rule": "^1.0.0", + "unist-util-visit": "^1.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } + } + }, + "remark-lint-no-empty-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-empty-url/-/remark-lint-no-empty-url-4.0.0.tgz", + "integrity": "sha512-2zJxrSnL42wGe+CSZepBzoj8d/FeL/QU8GM6TEO/5qGfXwvJD7s2v6q074UJU0CAaWlWRqSxElescwk3yGQddA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-file-name-articles": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-3.0.0.tgz", + "integrity": "sha512-il4IseupahbV2TVfFjfDVL/EQw7jBWVlMVsv4K2cgl5uPIjiCjFGQypqKnWl6pZDN0oNOs/DE8gBdyuDjldJaA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-file-name-consecutive-dashes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-3.0.0.tgz", + "integrity": "sha512-3vSI1LOQlu8NSCpWLsKELa8dS9HU+YVZE0U43/DNkdEcnZmlJLpTHQjBTMZUHQipRgoOO+TOSyXFyN/H+2lbuQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-file-name-irregular-characters": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-3.0.0.tgz", + "integrity": "sha512-DhGreliHNU7lLTARQujsaLAn8fUPY0V+H0LSmOUuowBZPtIRWeNdQhunSp96RvsuYdqAdERXe0WuH58i3pRqrg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-file-name-mixed-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-3.0.0.tgz", + "integrity": "sha512-MXXNHdGB6P46itkf8gRP0kxQL85KfAj9YOOBqNtGsgI/8J5rsyM/rz1Ac20Xe+5C5oGi71+7EO/TExKu/+7dfw==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-file-name-outer-dashes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-3.0.0.tgz", + "integrity": "sha512-3kgamCp39mdlCtqF/+JLwwS4VpSj5wvVwRythUfrpW7993I9kF67dBsaU545aEzWSK+UJZqjb40i0m2VfnBRfQ==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-heading-content-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-5.0.0.tgz", + "integrity": "sha512-psYSlD2BjcVkgpeXOLwPcYFBrbtJWp8E8JX1J4vSfoHPeY6aIxgYxXkf57cjGTApfRL8xawBmMDiF1FgQvpZYg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-heading-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-5.0.0.tgz", + "integrity": "sha512-JWGIWhaEzH00HywI0DHex92tJ5Mw7l11shQ6/MGhRjYsHMRWcwWcVeOuktVMe/BiQbg0hRoE4+g0z2VgUD6Cqw==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } + } + }, + "remark-lint-no-heading-like-paragraph": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-like-paragraph/-/remark-lint-no-heading-like-paragraph-4.0.0.tgz", + "integrity": "sha512-6P22xHF+2omrQUA9ujQ5yBUlZr3goaAxoa1t3wNSIydzqkbgwLS+RlpGsVvilW1Q8h4JgWpB42Zpflat6xr90g==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "remark-lint-no-heading-punctuation": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-4.0.0.tgz", + "integrity": "sha512-7V23C3Q4yX9zEOLZdbv6o8wVxxeWB/F+h9by55zPyk2AwbqF2t2xevnAmN3XFmKZABDTqLwjQxtK6bCVv/S1PQ==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "@types/mdast": "^4.0.0", + "mdast-util-mdx": "^3.0.0", + "mdast-util-to-string": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "peer": true - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "peer": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "remark-lint-no-inline-padding": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.2.tgz", + "integrity": "sha512-dGyhWsiqCZS3Slob0EVBUfsFBbdpMIBCvb56LlCgaHbnLsnNYx8PpF/wA5CgsN8BXIbXfRpyPB5cIJwIq5taYg==", "dev": true, "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^3.0.0", + "unified": "^10.0.0", + "unified-lint-rule": "^2.0.0", + "unist-util-generated": "^2.0.0", + "unist-util-visit": "^4.0.0" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "remark-lint-no-literal-urls": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-4.0.0.tgz", + "integrity": "sha512-rl/3Ai4Ax9IH/fRpOJZuXk1HgYX6oFTauhmBOilpqbq/YT2kN3FuXaneXdRfKv1bgMdHaLKxHWxGj/mDyA2n8w==", "dev": true, "requires": { - "picomatch": "^2.2.1" + "@types/mdast": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true, - "peer": true - }, - "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "remark-lint-no-multiple-toplevel-headings": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-4.0.0.tgz", + "integrity": "sha512-JW11iYxza7asDdhQuKfr8SH1u4NBOCQ4U7Ru0HrKCPcT4y/AB1C1il5uMQzbcervgYPBq69xzyQ24+AJeL0t3A==", "dev": true, - "peer": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-mdx": "^3.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "peer": true - }, - "remark": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/remark/-/remark-14.0.2.tgz", - "integrity": "sha512-A3ARm2V4BgiRXaUo5K0dRvJ1lbogrbXnhkJRmD0yw092/Yl0kOCZt1k9ZeElEwkZsWGsMumz6qL5MfNJH9nOBA==", + "remark-lint-no-reference-like-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-reference-like-url/-/remark-lint-no-reference-like-url-4.0.0.tgz", + "integrity": "sha512-YkP8qWdrWDr9s8JLbJoC/U5Z0fU7hpa59Nin0i8zEOtD9coiYoI/YtXRKqSXuAKDmweb+JckhqtKuGJS5u77+w==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "remark-parse": "^10.0.0", - "remark-stringify": "^10.0.0", - "unified": "^10.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-cli": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-cli/-/remark-cli-10.0.1.tgz", - "integrity": "sha512-+eln31zLE69JwBMoa8nd2sPC0DFZyiWgBrshL8aKb3L2XXTRMuEKWE/IAtNPYEtcktceAQw+OpmqVy8pAmGOwQ==", + "remark-lint-no-repeat-punctuation": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/remark-lint-no-repeat-punctuation/-/remark-lint-no-repeat-punctuation-0.1.4.tgz", + "integrity": "sha512-JJduCs4FimdBcR1AB576SqIYOjt+7t8OjTnnlZMvjnw7lzkuL0+nNNHyNXVPaK6jxaLjEUhrH2/smU6vZFUT7g==", "dev": true, "requires": { - "remark": "^14.0.0", - "unified-args": "^9.0.0" + "unified-lint-rule": "^1.0.3", + "unist-util-map": "^1.0.4", + "unist-util-to-list-of-char": "^0.1.3" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + } } }, - "remark-frontmatter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", - "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", + "remark-lint-no-shell-dollars": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-4.0.0.tgz", + "integrity": "sha512-ye2h8FzjsgqqQV0HHN2g9N4FqI3eD9Gpgu7tU5ADIJyQ3mUJdwBoFn7IlGnpmumR1fb/l6u/AhRavIZxXYqG+Q==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-frontmatter": "^1.0.0", - "micromark-extension-frontmatter": "^1.0.0", - "unified": "^10.0.0" + "@types/mdast": "^4.0.0", + "collapse-white-space": "^2.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-heading-gap": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-heading-gap/-/remark-heading-gap-5.0.1.tgz", - "integrity": "sha512-Jt2Jh9K5tS7+gpMwddv7hQFpFiYYwB1LkcpvElx7DuNHIfx7LglMKVM/j0DojEVbSCX9U8wV4IotMYzdjk1++A==", + "remark-lint-no-shortcut-reference-image": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-4.0.0.tgz", + "integrity": "sha512-YEiCpW5F/8/LZyxlOuVK2L/n0NJ1AB0AJK7oP39OVyEk3Xl7w+JQi6nZ3KiH6REh+PWGqKn6M0KEPL9cT/iAOw==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/remark-lint/-/remark-lint-9.1.1.tgz", - "integrity": "sha512-zhe6twuqgkx/9KgZyNyaO0cceA4jQuJcyzMOBC+JZiAzMN6mFUmcssWZyY30ko8ut9vQDMX/pyQnolGn+Fg/Tw==", + "remark-lint-no-shortcut-reference-link": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-4.0.0.tgz", + "integrity": "sha512-6jka2Zz3I6G2MvDcKrwADYhTOxHMFMK854u1cfBEIH5/XnCCXROtoqiiDtbZw+NJqbmwsBKvGL4t2gnmEJUmgg==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "remark-message-control": "^7.0.0", - "unified": "^10.1.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-blockquote-indentation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-blockquote-indentation/-/remark-lint-blockquote-indentation-3.1.1.tgz", - "integrity": "sha512-u9cjedM6zcK8vRicis5n/xeOSDIC3FGBCKc3K9pqw+nNrOjY85FwxDQKZZ/kx7rmkdRZEhgyHak+wzPBllcxBQ==", + "remark-lint-no-table-indentation": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-5.0.0.tgz", + "integrity": "sha512-MaLmnzgirpnRiRjWwrsyOX0RmP2eG4YAv169MtsxTVa6O3CpUDwTuTzivudE9L0kVvTlyF9DXEmdyjm85LDyVA==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-checkbox-character-style": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-character-style/-/remark-lint-checkbox-character-style-4.1.1.tgz", - "integrity": "sha512-KPSW3wfHfB8m9hzrtHiBHCTUIsOPX5nZR7VM+2pMjwqnhI6Mp94DKprkNo1ekNZALNeoZIDWZUSYxSiiwFfmVQ==", + "remark-lint-no-tabs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-4.0.0.tgz", + "integrity": "sha512-rQR7LDdcw047ajB3D+v9uzdB8aZfZtEdlUJvQXKkcVDteWiuXGC3PcIrmM/8n3J/wlFMuwoAaW2IcdlJf8HzXQ==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "vfile-location": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-checkbox-content-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-checkbox-content-indent/-/remark-lint-checkbox-content-indent-4.1.1.tgz", - "integrity": "sha512-apkM6sqCwAHwNV0v6KuEbq50fH3mTAV4wKTwI1nWgEj33/nf4+RvLLPgznoc2olZyeAIHR69EKPQiernjCXPOw==", + "remark-lint-no-undefined-references": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-5.0.0.tgz", + "integrity": "sha512-O0q8bHpRHK1T85oqO+uep4BkvQnZZp3y+wahDeeLLq9dCJfF56sq6Tt5OOTt1BAOZlpobS3OPQHUiJWYP6hX1w==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "@types/mdast": "^4.0.0", + "collapse-white-space": "^2.0.0", + "devlop": "^1.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-location": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-code": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-code/-/remark-lint-code-2.0.0.tgz", - "integrity": "sha1-A+DC6Qru2+h1qHlf6s9XmIt9lXw=", + "remark-lint-no-unused-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-4.0.0.tgz", + "integrity": "sha512-YCZ6k575NCTx7mnN+9ls0G6YgMsZHi0LYQqfLW8MNVHBtbpTBvfmk8I39bmsvuKWeBD98weZoXSDqIiIGg+Q/g==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.0", - "unist-util-visit": "^1.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-visit": "^5.0.0" }, "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" } }, "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } }, "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" } }, "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } } } }, - "remark-lint-code-block-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-code-block-style/-/remark-lint-code-block-style-3.1.0.tgz", - "integrity": "sha512-Hv4YQ8ueLGpjItla4CkcOkcfGj+nlquqylDgCm1/xKnW+Ke2a4qVTMVJrP9Krp4FWmXgktJLDHjhRH+pzhDXLg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-definition-case": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-case/-/remark-lint-definition-case-3.1.1.tgz", - "integrity": "sha512-dirX0BSfbm1Ixx4Hv4xRQliEP1rw8dDitw2Om3XcO2QqF8bWrzF06/xeMlDNAaT77Cxqb9S7bODo/q+CYUxyWQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-definition-spacing": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-definition-spacing/-/remark-lint-definition-spacing-3.1.1.tgz", - "integrity": "sha512-PR+cYvc0FMtFWjkaXePysW88r7Y7eIwbpUGPFDIWE48fiRiz8U3VIk05P3loQCpCkbmUeInAAYD8tIFPTg4Jlg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-emphasis-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-emphasis-marker/-/remark-lint-emphasis-marker-3.1.1.tgz", - "integrity": "sha512-VduuT+KAr0vA78xBLJdIcenCQja4mAd81aNACfdz7BUPLphIQa84D5uzl+nZatSaCXLebCNp5jP/bzVUsBmRKw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-fenced-code-flag": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-flag/-/remark-lint-fenced-code-flag-3.1.1.tgz", - "integrity": "sha512-FFVZmYsBccKIIEgOtgdZEpQdARtAat1LTLBydnIpyNIvcntzWwtrtlj9mtjL8ZoSRre8HtwmEnBFyOfmM/NWaA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-fenced-code-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-fenced-code-marker/-/remark-lint-fenced-code-marker-3.1.1.tgz", - "integrity": "sha512-x/t8sJWPvE46knKz6zW03j9VX5477srHUmRFbnXhZ3K8e37cYVUIvfbPhcPCAosSsOki9+dvGfZsWQiKuUNNfQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-file-extension": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-file-extension/-/remark-lint-file-extension-2.1.1.tgz", - "integrity": "sha512-r6OMe27YZzr2NFjPMbBxgm8RZxigRwzeFSjapPlqcxk0Q0w/6sosJsceBNlGGlk00pltvv7NPqSexbXUjirrQQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-final-definition": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-definition/-/remark-lint-final-definition-3.1.1.tgz", - "integrity": "sha512-94hRV+EBIuLVFooiimsZwh5ZPEcTqjy5wr7LgqxoUUWy+srTanndaLoki7bxQJeIcWUnomZncsJAyL0Lo7toxw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-final-newline": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-final-newline/-/remark-lint-final-newline-2.1.1.tgz", - "integrity": "sha512-cgKYaI7ujUse/kV4KajLv2j1kmi1CxpAu+w7wIU0/Faihhb3sZAf4a5ACf2Wu8NoTSIr1Q//3hDysG507PIoDg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-hard-break-spaces": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-hard-break-spaces/-/remark-lint-hard-break-spaces-3.1.1.tgz", - "integrity": "sha512-UfwFvESpX32qwyHJeluuUuRPWmxJDTkmjnWv2r49G9fC4Jrzm4crdJMs3sWsrGiQ3mSex6bgp/8rqDgtBng2IA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-heading-increment": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-increment/-/remark-lint-heading-increment-3.1.1.tgz", - "integrity": "sha512-DtiMwZNAE/iAZWuZGjTXxYjNDQ375r59C99aVeVp1nKaovIufKuHWAm9U/9FAGBJNgBx6Ovfdej4YwIxd0yAPw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-heading-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-heading-style/-/remark-lint-heading-style-3.1.1.tgz", - "integrity": "sha512-Qm7ZAF+s46ns0Wo5TlHGIn/PPMMynytn8SSLEdMIo6Uo/+8PAcmQ3zU1pj57KYxfyDoN5iQPgPIwPYMLYQ2TSQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-heading-whitespace": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-heading-whitespace/-/remark-lint-heading-whitespace-1.0.0.tgz", - "integrity": "sha512-DykoBIXNbkihg64D+mztSOv3l82RTH4tIZW/HUB4QM4NpIEB+pVIPQpCYD0K4pTgvKiwoqsj4NY8qJ1EhNHAmQ==", - "dev": true, - "requires": { - "mdast-util-to-string": "^1.0.4", - "unified-lint-rule": "^1.0.2", - "unist-util-visit": "^1.3.0" + "remark-lint-ordered-list-marker-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-4.0.0.tgz", + "integrity": "sha512-xZ7Xppy5fzACH4b9h1b4lTzVtNY2AlUkNTfl1Oe6cIKN8tk3juFxN0wL2RpktPtSZ7iRIabzFmg6l8WPhlASJA==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "dependencies": { - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" } }, "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" } }, "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } } } }, - "remark-lint-link-title-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-link-title-style/-/remark-lint-link-title-style-3.1.1.tgz", - "integrity": "sha512-JWWiuUFy/N2iwQ3eWIxFy6olX8D7xCFw8LoM0vZI2CHTZJrmDMaWwnl8jziP+HHHheFX3wkVqsoaYod536ArRw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - } - }, - "remark-lint-list-item-bullet-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-bullet-indent/-/remark-lint-list-item-bullet-indent-4.1.1.tgz", - "integrity": "sha512-NFvXVj1Nm12+Ma48NOjZCGb/D0IhmUcxyrTCpPp+UNJhEWrmFxM8nSyIiZgXadgXErnuv+xm2Atw7TAcZ9a1Cg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-list-item-content-indent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-content-indent/-/remark-lint-list-item-content-indent-3.1.1.tgz", - "integrity": "sha512-gcZhAXLd1onkutTEqQTybyANjdxvlOlu0y/AU4H3f6L99UGC85ymRhEeu5vGSkvsKKPR1FrMTEH6G2nNgtavgg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-list-item-indent": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-indent/-/remark-lint-list-item-indent-3.1.1.tgz", - "integrity": "sha512-OSTG64e52v8XBmmeT0lefpiAfCMYHJxMMUrMnhTjLVyWAbEO0vqqR5bLvfLwzK+P4nY2D/8XKku0hw35dM86Rw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-list-item-spacing": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-list-item-spacing/-/remark-lint-list-item-spacing-4.1.1.tgz", - "integrity": "sha512-MqXmahPgYrvfA7SPqmcAC6fI40jIgXG33EeE/MhFvMLWh04k+fqGf2O2aH1KT664MlwM4oETbTI4xj3/KCIHZA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-maximum-heading-length": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-heading-length/-/remark-lint-maximum-heading-length-3.1.1.tgz", - "integrity": "sha512-hTOvRDnULpu0S+k51lovT28TLBgtw8XR0qq+mECSsoyuT4C38UBjQRic5OPo68AZMH0ad/93uj6yvfFtH0K8Lg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-maximum-line-length": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-maximum-line-length/-/remark-lint-maximum-line-length-3.1.2.tgz", - "integrity": "sha512-KwddpVmNifTHNXwTQQgVufuUvv0hhu9kJVvmpNdEvfEc7tc3wBkaavyi3kKsUB8WwMhGtZuXVWy6OdPC1axzhw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-auto-link-without-protocol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-auto-link-without-protocol/-/remark-lint-no-auto-link-without-protocol-3.1.1.tgz", - "integrity": "sha512-lCjBuoSUWjN1kO0J7vqQgn7HUF/WeOHOqc3oiq9LMRXIovKWqPCBi77o8Npv8KfV+JXeRl+hrupfbhJXlLturA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-blockquote-without-marker": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-blockquote-without-marker/-/remark-lint-no-blockquote-without-marker-5.1.1.tgz", - "integrity": "sha512-7jL7eKS25kKRhQ7SKKB5eRfNleDMWKWAmZ5Y/votJdDoM+6qsopLLumPWaSzP0onyV3dyHRhPfBtqelt3hvcyA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - } - }, - "remark-lint-no-consecutive-blank-lines": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-no-consecutive-blank-lines/-/remark-lint-no-consecutive-blank-lines-4.1.2.tgz", - "integrity": "sha512-wRsR3kFgHaZ4mO3KASU43oXGLGezNZ64yNs1ChPUacKh0Bm7cwGnxN9GHGAbOXspwrYrN2eCDxzCbdPEZi2qKw==", + "remark-lint-ordered-list-marker-value": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-4.0.0.tgz", + "integrity": "sha512-7UjNU2Nv9LGEONTU9GPmTVoNoGKD5aL1X2xHzMbSJiTc50bfcazYqZawO+qj1pQ04WPhto1qHnl0HRB5wwSVwA==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "micromark-util-character": "^2.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-no-dead-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-dead-urls/-/remark-lint-no-dead-urls-1.1.0.tgz", - "integrity": "sha512-it3EZmMQ+hwGhUf60NkXN0mMIFuFkS0cxdbgEbhZ/Fj1PlUBpe3gDBtWJ/sqNwSNvQlNSzpvMQkNHSoAhlsVjA==", + "remark-lint-rule-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-4.0.0.tgz", + "integrity": "sha512-Kt7IHMB5IbLgRFKaFUmB895sV3PTD0MBgN9CvXKxr1wHFF43S6tabjFIBSoQqyJRlhH0S3rK6Lvopofa009gLg==", "dev": true, "requires": { - "check-links": "^1.1.8", - "is-online": "^8.2.1", - "unified-lint-rule": "^1.0.4", - "unist-util-visit": "^2.0.1" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" } }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "dev": true - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" } }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } } } }, - "remark-lint-no-duplicate-definitions": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-definitions/-/remark-lint-no-duplicate-definitions-3.1.1.tgz", - "integrity": "sha512-9p+nBz8VvV+t4g/ALNLVN8naV+ffAzC4ADyg9QivzmKwLjyF93Avt4HYNlb2GZ+aoXRQSVG1wjjWFeDC9c7Tdg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-duplicate-headings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-duplicate-headings/-/remark-lint-no-duplicate-headings-3.1.1.tgz", - "integrity": "sha512-gSO/BngGkxF35Fsctzt3YMwGEZ8F7f71zx7h0Y97DylyL6WXVuWP4saCmQTlbB4FpD0UXEnRROJ6fBFDvJlzOA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-emphasis-as-heading": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-emphasis-as-heading/-/remark-lint-no-emphasis-as-heading-3.1.1.tgz", - "integrity": "sha512-F45yuLsYVP4r6OjVtePKk7Aymnf3rBLHXYjnSJggEaYn0j+72xOBLrqmj6ii5YGfDsBwG2pDNTBx4vm3xM7P0Q==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-empty-sections": { + "remark-lint-strong-marker": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-lint-no-empty-sections/-/remark-lint-no-empty-sections-4.0.0.tgz", - "integrity": "sha512-Tx1nCu7Dq3dsJ500402sSvM0uVK/6khSuEjx8K8u9aHN+Y4vjL6h88xVzdzCmZq2J2yqyFnvMjG1y7lQv+DRvg==", + "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-4.0.0.tgz", + "integrity": "sha512-YcvuzakYhQWdCH+1E30sUY+wyvq+PNa77NZAMAYO/cS/pZczFB+q4Ccttw4Q+No/chX8oMfe0GYtm8dDWLei/g==", "dev": true, "requires": { - "mdast-util-to-string": "^1.0.2", - "unified-lint-rule": "^1.0.0", - "unist-util-visit": "^1.0.0" + "@types/mdast": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "dependencies": { - "mdast-util-to-string": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", - "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", "dev": true }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" } }, "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" } }, "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" } - } - } - }, - "remark-lint-no-empty-url": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-empty-url/-/remark-lint-no-empty-url-3.1.1.tgz", - "integrity": "sha512-zxIkDMggf6R/NCDkYAsaVHaFhklkp6WvV/wdeJAzT3BverGFnM8QIHUAv8YIQvCGqYWov275SVN1eu81DoU95g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-file-name-articles": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-articles/-/remark-lint-no-file-name-articles-2.1.1.tgz", - "integrity": "sha512-7fiHKQUGvP4WOsieZ1dxm8WQWWjXjPj0Uix6pk2dSTJqxvaosjKH1AV0J/eVvliat0BGH8Cz4SUbuz5vG6YbdQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-no-file-name-consecutive-dashes": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-consecutive-dashes/-/remark-lint-no-file-name-consecutive-dashes-2.1.1.tgz", - "integrity": "sha512-tM4IpURGuresyeIBsXT5jsY3lZakgO6IO59ixcFt015bFjTOW54MrBvdJxA60QHhf5DAyHzD8wGeULPSs7ZQfg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-no-file-name-irregular-characters": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-irregular-characters/-/remark-lint-no-file-name-irregular-characters-2.1.1.tgz", - "integrity": "sha512-rVeCv1XRdLtp/rxLaiFKElaIHuIlokypV/c2aCG3VVYcQ4+ZmJxq018kEsolR2+Dv9m3vKp8Fy1482US4g4WKA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-no-file-name-mixed-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-mixed-case/-/remark-lint-no-file-name-mixed-case-2.1.1.tgz", - "integrity": "sha512-mJU3hYzyXNo8NkoSafPcsgr+Gema+vDCzNWlLw05UdFXJK/cVy+6DVsbrEFjrz8L+WF7uQmUHBtTvd91SqoItg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-no-file-name-outer-dashes": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-file-name-outer-dashes/-/remark-lint-no-file-name-outer-dashes-2.1.1.tgz", - "integrity": "sha512-2kRcVNzZb0zS3jE+Iaa6MEpplhqXSdsHBILS+BxJ4cDGAAIdeipY8hKaDLdZi+34wvrfnDxNgvNLcHpgqO+OZA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0" - } - }, - "remark-lint-no-heading-content-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-content-indent/-/remark-lint-no-heading-content-indent-4.1.1.tgz", - "integrity": "sha512-W4zF7MA72IDC5JB0qzciwsnioL5XlnoE0r1F7sDS0I5CJfQtHYOLlxb3UAIlgRCkBokPWCp0E4o1fsY/gQUKVg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-heading-style": "^2.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-heading-indent": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-indent/-/remark-lint-no-heading-indent-4.1.1.tgz", - "integrity": "sha512-3vIfT7gPdpE9D7muIQ6YzSF1q27H9SbsDD7ClJRkEWxMiAzBg0obOZFOIBYukUkmGWdOR5P1EDn5n9TEzS1Fyg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "pluralize": "^8.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-heading-like-paragraph": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-like-paragraph/-/remark-lint-no-heading-like-paragraph-3.1.1.tgz", - "integrity": "sha512-eDQkw1ir0j2VVmZd60Hy3CUAj85U7zKf59bGEBdXr2OQYJQhvme7XqKwY8QfMlBqn9lYg1/DxsGWt0+5ESIogw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-heading-punctuation": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-heading-punctuation/-/remark-lint-no-heading-punctuation-3.1.1.tgz", - "integrity": "sha512-ZexHx4rmsjKVF1/Fvdig0yOgpWl0wFa43+sqg880HT3PW9KmEczjSRkwlMaTlVgDzC0paNn2FXfQMuEQW4YDLg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-inline-padding": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-inline-padding/-/remark-lint-no-inline-padding-4.1.1.tgz", - "integrity": "sha512-++IMm6ohOPKNOrybqjP9eiclEtVX/Rd2HpF2UD9icrC1X5nvrI6tlfN55tePaFvWAB7pe6MW4LzNEMnWse61Lw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-literal-urls": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-literal-urls/-/remark-lint-no-literal-urls-3.1.1.tgz", - "integrity": "sha512-tZZ4gtZMA//ZAf7GJTE8S9yjzqXUfUTlR/lvU7ffc7NeSurqCBwAtHqeXVCHiD39JnlHVSW2MLYhvHp53lBGvA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-multiple-toplevel-headings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-multiple-toplevel-headings/-/remark-lint-no-multiple-toplevel-headings-3.1.1.tgz", - "integrity": "sha512-bM//SIBvIkoGUpA8hR5QibJ+7C2R50PTIRrc4te93YNRG+ie8bJzjwuO9jIMedoDfJB6/+7EqO9FYBivjBZ3MA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-reference-like-url": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-reference-like-url/-/remark-lint-no-reference-like-url-3.1.1.tgz", - "integrity": "sha512-ELO2uez1NO9wEb2nNRY4uVBfw4TYYUHWOnLajExGY92+i3Ylt3EmMwRONT2maJX5qKj4cu8uPi7HAkMIxq8jFg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-no-repeat-punctuation": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/remark-lint-no-repeat-punctuation/-/remark-lint-no-repeat-punctuation-0.1.4.tgz", - "integrity": "sha512-JJduCs4FimdBcR1AB576SqIYOjt+7t8OjTnnlZMvjnw7lzkuL0+nNNHyNXVPaK6jxaLjEUhrH2/smU6vZFUT7g==", + "remark-lint-table-cell-padding": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-5.0.0.tgz", + "integrity": "sha512-LNyiHDQZBIOqcQGG1tYsZHW7g0v8OyRmRgDrD5WEsMaAYfM6EiECUokN/Q4py9h4oM/2KUSrdZbtfuZmy87/kA==", "dev": true, "requires": { - "unified-lint-rule": "^1.0.3", - "unist-util-map": "^1.0.4", - "unist-util-to-list-of-char": "^0.1.3" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" }, "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } } } }, - "remark-lint-no-shell-dollars": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shell-dollars/-/remark-lint-no-shell-dollars-3.1.1.tgz", - "integrity": "sha512-Q3Ad1TaOPxbYog5+Of/quPG3Fy+dMKiHjT8KsU7NDiHG6YJOnAJ3f3w+y13CIlNIaKc/MrisgcthhrZ7NsgXfA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-shortcut-reference-image": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-image/-/remark-lint-no-shortcut-reference-image-3.1.1.tgz", - "integrity": "sha512-m8tH+loDagd1JUns/T4eyulVXgVvE+ZSs7owRUOmP+dgsKJuO5sl1AdN9eyKDVMEvxHF3Pm5WqE62QIRNM48mA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-shortcut-reference-link": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-shortcut-reference-link/-/remark-lint-no-shortcut-reference-link-3.1.1.tgz", - "integrity": "sha512-oDJ92/jXQ842HgrBGgZdP7FA+N2jBMCBU2+jRElkS+OWVut0UaDILtNavNy/e85B3SLPj3RoXKF96M4vfJ7B2A==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, - "remark-lint-no-table-indentation": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-table-indentation/-/remark-lint-no-table-indentation-4.1.1.tgz", - "integrity": "sha512-eklvBxUSrkVbJxeokepOvFZ3n2V6zaJERIiOowR+y/Bz4dRHDMij1Ojg55AMO9yUMvxWPV3JPOeThliAcPmrMg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" - } - }, - "remark-lint-no-tabs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-tabs/-/remark-lint-no-tabs-3.1.1.tgz", - "integrity": "sha512-+MjXoHSSqRFUUz6XHgB1z7F5zIETxhkY+lC5LsOYb1r2ZdujZQWzBzNW5ya4HH5JiDVBPhp8MrqM9cP1v7tB5g==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "vfile-location": "^4.0.0" - } - }, - "remark-lint-no-undefined-references": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-undefined-references/-/remark-lint-no-undefined-references-4.1.1.tgz", - "integrity": "sha512-J20rKfTGflLiTI3T5JlLZSmINk6aDGmZi1y70lpU69LDfAyHAKgDK6sSW9XDeFmCPPdm8Ybxe5Gf2a70k+GcVQ==", + "remark-lint-table-pipe-alignment": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-4.0.0.tgz", + "integrity": "sha512-nx+xpEIWQRLOcq9hIbUIvhSE1NYRmDJmCY3cMoHJ1sIW7dRXMHyWfpWTgu7mpREKwSQdE0q4qnzk8McQQSkIcg==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "micromark-util-normalize-identifier": "^1.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0", - "vfile-location": "^4.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "mdast-util-phrasing": "^4.0.0", + "pluralize": "^8.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-no-unused-definitions": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-no-unused-definitions/-/remark-lint-no-unused-definitions-3.1.1.tgz", - "integrity": "sha512-/GtyBukhAxi5MEX/g/m+FzDEflSbTe2/cpe2H+tJZyDmiLhjGXRdwWnPRDp+mB9g1iIZgVRCk7T4v90RbQX/mw==", + "remark-lint-table-pipes": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-5.0.0.tgz", + "integrity": "sha512-e7jzAScDrt5+eMomh099TZJBN2K9ldDxBu9iYhNu5C0YsdAvnckJkgilsuClxFpmx4LCVYaX0EGbt/hQ3LB3xg==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-ordered-list-marker-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-style/-/remark-lint-ordered-list-marker-style-3.1.1.tgz", - "integrity": "sha512-IWcWaJoaSb4yoSOuvDbj9B2uXp9kSj58DqtrMKo8MoRShmbj1onVfulTxoTLeLtI11NvW+mj3jPSpqjMjls+5Q==", + "remark-lint-unordered-list-marker-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-4.0.0.tgz", + "integrity": "sha512-XlP4Wr4KJNovyWVv0H5axfUlF23iE9Kt2SxaVq4+ieum5YcMmKE6KsL+aqt3kiJb60SH1u6a0bxKFvdM/9riOA==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-phrasing": "^4.0.0", + "unified-lint-rule": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unified-lint-rule": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-3.0.0.tgz", + "integrity": "sha512-Sz96ILLsTy3djsG3H44zFb2b77MFf9CQVYnV3PWkxgRX8/n31fFrr+JnzUaJ6cbOHTtZnL1A71+YodsTjzwAew==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "trough": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-ordered-list-marker-value": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-ordered-list-marker-value/-/remark-lint-ordered-list-marker-value-3.1.1.tgz", - "integrity": "sha512-+bQZbo+v/A8CuLrO71gobJuKR4/sfnPgWyEggSa+zq+LXPK1HiMDjap0Wr07uYgcUXsXIPh+HD/5J5by6JL+vg==", + "remark-lint-write-good": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remark-lint-write-good/-/remark-lint-write-good-1.2.0.tgz", + "integrity": "sha512-HYiwM16RRBm979yDb/IVwPe1eFhzA1HATe1WucRiYWS10jcPRgJe9FihH7W5uzQFDqX5aRbTtu/yPdq+hPnYkw==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "nlcst-to-string": "^2.0.0", + "unified-lint-rule": "^1.0.1", + "unist-util-visit": "^1.1.1", + "write-good": "^1.0.2" + }, + "dependencies": { + "unified-lint-rule": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", + "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "dev": true, + "requires": { + "wrapped": "^1.0.1" + } + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + } } }, - "remark-lint-rule-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-rule-style/-/remark-lint-rule-style-3.1.1.tgz", - "integrity": "sha512-+oZe0ph4DWHGwPkQ/FpqiGp4WULTXB1edftnnNbizYT+Wr+/ux7GNTx78oXH/PHwlnOtVIExMc4W/vDXrUj/DQ==", + "remark-message-control": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-8.0.0.tgz", + "integrity": "sha512-brpzOO+jdyE/mLqvqqvbogmhGxKygjpCUCG/PwSCU43+JZQ+RM+sSzkCWBcYvgF3KIAVNIoPsvXjBkzO7EdsYQ==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-comment-marker": "^3.0.0", + "unified-message-control": "^5.0.0", + "vfile": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-strong-marker": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-strong-marker/-/remark-lint-strong-marker-3.1.1.tgz", - "integrity": "sha512-tX9Os2C48Hh8P8CouY4dcnAhGnR3trL+NCDqIvJvFDR9Rvm9yfNQaY2N4ZHWVY0iUicq9DpqEiJTgUsT8AGv/w==", + "remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-table-cell-padding": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/remark-lint-table-cell-padding/-/remark-lint-table-cell-padding-4.1.2.tgz", - "integrity": "sha512-cx5BXjHtpACa7Z51Vuqzy9BI4Z8Hnxz7vklhhrubkoB7mbctP/mR+Nh4B8eE5VtgFYJNHFwIltl96PuoctFCeQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "remark-preset-lint-consistent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-6.0.0.tgz", + "integrity": "sha512-W3fwxajdietwjnFyTH5x2le63hxWGVOXxIs7KjRqU+5wkkN6ZQyuwPeeomblmS9wQr50fkidhXNHNDyCXtqgxQ==", + "dev": true, + "requires": { + "remark-lint": "^10.0.0", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-checkbox-character-style": "^5.0.0", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-emphasis-marker": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", + "remark-lint-link-title-style": "^4.0.0", + "remark-lint-list-item-content-indent": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-table-pipe-alignment": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipe-alignment/-/remark-lint-table-pipe-alignment-3.1.1.tgz", - "integrity": "sha512-WOHv2yL4ZwXHM06MIyQNnGFYKz9m2k/GFIA/6hpArF8Ph/3v8CF0J/Hb3Yyfg39e5nODw3D2G3okCO+xgyGQGA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "remark-preset-lint-markdown-style-guide": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-6.0.0.tgz", + "integrity": "sha512-izsfNTHeqrRP64VWV6OdJnSUDwKFSthMKiiDcu14ODpPV0t7YiotCQWzgc7L4eW9Ctcp4aB4nHNLSuDmwhEWrQ==", + "dev": true, + "requires": { + "remark-lint": "^10.0.0", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-definition-case": "^4.0.0", + "remark-lint-definition-spacing": "^4.0.0", + "remark-lint-emphasis-marker": "^4.0.0", + "remark-lint-fenced-code-flag": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-file-extension": "^3.0.0", + "remark-lint-final-definition": "^4.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-heading-increment": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", + "remark-lint-link-title-style": "^4.0.0", + "remark-lint-list-item-content-indent": "^4.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-list-item-spacing": "^5.0.0", + "remark-lint-maximum-heading-length": "^4.0.0", + "remark-lint-maximum-line-length": "^4.0.0", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-consecutive-blank-lines": "^5.0.0", + "remark-lint-no-duplicate-headings": "^4.0.0", + "remark-lint-no-emphasis-as-heading": "^4.0.0", + "remark-lint-no-file-name-articles": "^3.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^3.0.0", + "remark-lint-no-file-name-irregular-characters": "^3.0.0", + "remark-lint-no-file-name-mixed-case": "^3.0.0", + "remark-lint-no-file-name-outer-dashes": "^3.0.0", + "remark-lint-no-heading-punctuation": "^4.0.0", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-multiple-toplevel-headings": "^4.0.0", + "remark-lint-no-shell-dollars": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-shortcut-reference-link": "^4.0.0", + "remark-lint-no-table-indentation": "^5.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "remark-lint-table-pipe-alignment": "^4.0.0", + "remark-lint-table-pipes": "^5.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-table-pipes": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-table-pipes/-/remark-lint-table-pipes-4.1.1.tgz", - "integrity": "sha512-mJnB2FpjJTE4s9kE1JX8gcCjCFvtGPjzXUiQy0sbPHn2YM9EWG7kvFWYoqWK4w569CEQJyxZraEPltmhDjQTjg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "remark-preset-lint-recommended": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-7.0.0.tgz", + "integrity": "sha512-A9aPDL78OO12xG2a83DVd+M2QzdBMjn545fbXj40BFJdpt9t//MADkPAwRfpMCBkKi+iECPUTFCb3Jm8SsFG2w==", + "dev": true, + "requires": { + "remark-lint": "^10.0.0", + "remark-lint-final-newline": "^3.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-list-item-bullet-indent": "^5.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-duplicate-definitions": "^4.0.0", + "remark-lint-no-heading-content-indent": "^5.0.0", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-shortcut-reference-link": "^4.0.0", + "remark-lint-no-undefined-references": "^5.0.0", + "remark-lint-no-unused-definitions": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "unified": "^11.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-unordered-list-marker-style": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/remark-lint-unordered-list-marker-style/-/remark-lint-unordered-list-marker-style-3.1.1.tgz", - "integrity": "sha512-JwH8oIDi9f5Z8cTQLimhJ/fkbPwI3OpNSifjYyObNNuc4PG4/NUoe5ZuD10uPmPYHZW+713RZ8S5ucVCkI8dDA==", + "remark-retext": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-6.0.0.tgz", + "integrity": "sha512-VYs0p+3G4DKm/KtWx7LV8YPbyX4CjBf1SZcEk2usEv3QK6JK4g5EfurDAPUmGVZOx/NcqOiNbozfGqpl2HQfTA==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "unified": "^10.0.0", - "unified-lint-rule": "^2.0.0", - "unist-util-generated": "^2.0.0", - "unist-util-position": "^4.0.0", - "unist-util-visit": "^4.0.0" + "@types/mdast": "^4.0.0", + "@types/nlcst": "^2.0.0", + "mdast-util-to-nlcst": "^7.0.0", + "parse-latin": "^7.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, - "remark-lint-write-good": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remark-lint-write-good/-/remark-lint-write-good-1.2.0.tgz", - "integrity": "sha512-HYiwM16RRBm979yDb/IVwPe1eFhzA1HATe1WucRiYWS10jcPRgJe9FihH7W5uzQFDqX5aRbTtu/yPdq+hPnYkw==", + "remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "dev": true, "requires": { - "nlcst-to-string": "^2.0.0", - "unified-lint-rule": "^1.0.1", - "unist-util-visit": "^1.1.1", - "write-good": "^1.0.2" + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" }, "dependencies": { - "unified-lint-rule": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/unified-lint-rule/-/unified-lint-rule-1.0.6.tgz", - "integrity": "sha512-YPK15YBFwnsVorDFG/u0cVVQN5G2a3V8zv5/N6KN3TCG+ajKtaALcy7u14DCSrJI+gZeyYquFL9cioJXOGXSvg==", + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", "dev": true, "requires": { - "wrapped": "^1.0.1" + "@types/unist": "*" } }, - "unist-util-is": { + "@types/unist": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", "dev": true }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "unified": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.3.tgz", + "integrity": "sha512-jlCV402P+YDcFcB2VcN/n8JasOddqIiaxv118wNBoZXEhOn+lYG7BR4Bfg2BwxvlK58dwbuH2w7GX2esAjL6Mg==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" } }, - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "dev": true, "requires": { - "unist-util-is": "^3.0.0" + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } } } }, - "remark-message-control": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/remark-message-control/-/remark-message-control-7.1.1.tgz", - "integrity": "sha512-xKRWl1NTBOKed0oEtCd8BUfH5m4s8WXxFFSoo7uUwx6GW/qdCy4zov5LfPyw7emantDmhfWn5PdIZgcbVcWMDQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-comment-marker": "^2.0.0", - "unified": "^10.0.0", - "unified-message-control": "^4.0.0", - "vfile": "^5.0.0" - } - }, - "remark-parse": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", - "integrity": "sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, - "remark-preset-lint-consistent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/remark-preset-lint-consistent/-/remark-preset-lint-consistent-5.1.1.tgz", - "integrity": "sha512-DZQfomiVi/1x7NRByWrOiIC+olEGa1PpyykKrowvYp5qr/Seq60FqU7OjBJxtcOLzgnQcu9Y2JXdHxFi4AAPXQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-blockquote-indentation": "^3.0.0", - "remark-lint-checkbox-character-style": "^4.0.0", - "remark-lint-code-block-style": "^3.0.0", - "remark-lint-emphasis-marker": "^3.0.0", - "remark-lint-fenced-code-marker": "^3.0.0", - "remark-lint-heading-style": "^3.0.0", - "remark-lint-link-title-style": "^3.0.0", - "remark-lint-list-item-content-indent": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "remark-lint-rule-style": "^3.0.0", - "remark-lint-strong-marker": "^3.0.0", - "remark-lint-table-cell-padding": "^4.0.0", - "unified": "^10.0.0" - } - }, - "remark-preset-lint-markdown-style-guide": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/remark-preset-lint-markdown-style-guide/-/remark-preset-lint-markdown-style-guide-5.1.2.tgz", - "integrity": "sha512-MIAhnz0wDOq/MqLucSaAPquKGFE2I5SxqRjgWT+ZGK7TmqTxrro53e11/Pc19xPX4evmzI5CZdvaRnIoxP3ysQ==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-blockquote-indentation": "^3.0.0", - "remark-lint-code-block-style": "^3.0.0", - "remark-lint-definition-case": "^3.0.0", - "remark-lint-definition-spacing": "^3.0.0", - "remark-lint-emphasis-marker": "^3.0.0", - "remark-lint-fenced-code-flag": "^3.0.0", - "remark-lint-fenced-code-marker": "^3.0.0", - "remark-lint-file-extension": "^2.0.0", - "remark-lint-final-definition": "^3.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-heading-increment": "^3.0.0", - "remark-lint-heading-style": "^3.0.0", - "remark-lint-link-title-style": "^3.0.0", - "remark-lint-list-item-content-indent": "^3.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-list-item-spacing": "^4.0.0", - "remark-lint-maximum-heading-length": "^3.0.0", - "remark-lint-maximum-line-length": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-consecutive-blank-lines": "^4.0.0", - "remark-lint-no-duplicate-headings": "^3.0.0", - "remark-lint-no-emphasis-as-heading": "^3.0.0", - "remark-lint-no-file-name-articles": "^2.0.0", - "remark-lint-no-file-name-consecutive-dashes": "^2.0.0", - "remark-lint-no-file-name-irregular-characters": "^2.0.0", - "remark-lint-no-file-name-mixed-case": "^2.0.0", - "remark-lint-no-file-name-outer-dashes": "^2.0.0", - "remark-lint-no-heading-punctuation": "^3.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-multiple-toplevel-headings": "^3.0.0", - "remark-lint-no-shell-dollars": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-table-indentation": "^4.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "remark-lint-ordered-list-marker-value": "^3.0.0", - "remark-lint-rule-style": "^3.0.0", - "remark-lint-strong-marker": "^3.0.0", - "remark-lint-table-cell-padding": "^4.0.0", - "remark-lint-table-pipe-alignment": "^3.0.0", - "remark-lint-table-pipes": "^4.0.0", - "remark-lint-unordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" - } - }, - "remark-preset-lint-recommended": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/remark-preset-lint-recommended/-/remark-preset-lint-recommended-6.1.2.tgz", - "integrity": "sha512-x9kWufNY8PNAhY4fsl+KD3atgQdo4imP3GDAQYbQ6ylWVyX13suPRLkqnupW0ODRynfUg8ZRt8pVX0wMHwgPAg==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "remark-lint": "^9.0.0", - "remark-lint-final-newline": "^2.0.0", - "remark-lint-hard-break-spaces": "^3.0.0", - "remark-lint-list-item-bullet-indent": "^4.0.0", - "remark-lint-list-item-indent": "^3.0.0", - "remark-lint-no-blockquote-without-marker": "^5.0.0", - "remark-lint-no-duplicate-definitions": "^3.0.0", - "remark-lint-no-heading-content-indent": "^4.0.0", - "remark-lint-no-inline-padding": "^4.0.0", - "remark-lint-no-literal-urls": "^3.0.0", - "remark-lint-no-shortcut-reference-image": "^3.0.0", - "remark-lint-no-shortcut-reference-link": "^3.0.0", - "remark-lint-no-undefined-references": "^4.0.0", - "remark-lint-no-unused-definitions": "^3.0.0", - "remark-lint-ordered-list-marker-style": "^3.0.0", - "unified": "^10.0.0" - } - }, - "remark-retext": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-retext/-/remark-retext-5.0.1.tgz", - "integrity": "sha512-h3kOjKNy7oJfohqXlKp+W4YDigHD3rw01x91qvQP/cUkK5nJrDl6yEYwTujQCAXSLZrsBxywlK3ntzIX6c29aA==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-to-nlcst": "^5.0.0", - "unified": "^10.0.0" - } - }, - "remark-stringify": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-10.0.2.tgz", - "integrity": "sha512-6wV3pvbPvHkbNnWB0wdDvVFHOe1hBRAx1Q/5g/EpH4RppAII6J8Gnwe7VbHuXaoKIF6LAg6ExTel/+kNqSQ7lw==", - "dev": true, - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.0.0", - "unified": "^10.0.0" - } - }, "remark-textr": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/remark-textr/-/remark-textr-5.0.1.tgz", - "integrity": "sha512-Kd5q7I1LsZ04meMZJJwBze/wxiLhAItRTGevDeyx3K/WMd4juO6WbGLro0/99Ui6I+lYx/l90v0Ax4dVPj3/0Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/remark-textr/-/remark-textr-6.1.0.tgz", + "integrity": "sha512-3A61/6Dn8x5wS7f9BubnIjwZfttEw9+PWVFtwOvRzKXLmZDV1mgi9MJeaQ9BNzWhojsSRHWLNa2JHKCOOI5DfA==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", + "@types/mdast": "^4.0.0", "textr": "^0.3.0", - "unified": "^10.0.0", - "unist-util-visit": "^4.0.0" + "unist-util-visit": "^5.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + } } }, "remark-validate-links": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-11.0.2.tgz", - "integrity": "sha512-SfVDWgF/Albdou1TmrCpq4AvJyvMnPflnaLLPUuFFxKO4Jp1o7fK2sinqPt+WW0DXS4JmtXPXm2FOkB8FJ08tQ==", + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/remark-validate-links/-/remark-validate-links-13.0.1.tgz", + "integrity": "sha512-GWDZWJAQU0+Fsm1GCLNeJoVcE9L3XTVrWCgQZOYREfXqRFIYaSoIBbARZizLm/vBESq+a3GwEBnIflSCNw26tw==", "dev": true, "requires": { - "@types/mdast": "^3.0.0", - "github-slugger": "^1.0.0", - "hosted-git-info": "^4.0.0", - "mdast-util-to-string": "^3.0.0", + "@types/hosted-git-info": "^3.0.0", + "@types/mdast": "^4.0.0", + "github-slugger": "^2.0.0", + "hosted-git-info": "^7.0.0", + "mdast-util-to-hast": "^13.0.0", + "mdast-util-to-string": "^4.0.0", "propose": "0.0.5", - "to-vfile": "^7.0.0", "trough": "^2.0.0", - "unified": "^10.0.0", - "unified-engine": "^9.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" + "unified-engine": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "dependencies": { + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, "resolve": { @@ -10605,6 +27252,12 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -10613,12 +27266,12 @@ "peer": true }, "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, "requires": { - "lowercase-keys": "^1.0.0" + "lowercase-keys": "^2.0.0" } }, "rimraf": { @@ -10631,15 +27284,6 @@ "glob": "^7.1.3" } }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "requires": { - "mri": "^1.1.0" - } - }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -10660,7 +27304,6 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "peer": true, "requires": { "shebang-regex": "^3.0.0" } @@ -10669,8 +27312,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "peer": true + "dev": true }, "side-channel": { "version": "1.0.4", @@ -10684,12 +27326,24 @@ "object-inspect": "^1.9.0" } }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, "sliced": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=", "dev": true }, + "space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -10700,14 +27354,56 @@ } }, "string-width": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", - "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", "dev": true, "requires": { "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", + "emoji-regex": "^10.2.1", "strip-ansi": "^7.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz", + "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==", + "dev": true + } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "string.prototype.matchall": { @@ -10749,6 +27445,16 @@ "define-properties": "^1.1.3" } }, + "stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "dev": true, + "requires": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + } + }, "strip-ansi": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", @@ -10758,6 +27464,23 @@ "ansi-regex": "^6.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } + } + }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -10777,6 +27500,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -10800,12 +27524,6 @@ "integrity": "sha1-cXNhKGlirI3za3omGft3OhW5t/c=", "dev": true }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -10815,22 +27533,18 @@ "is-number": "^7.0.0" } }, - "to-vfile": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-7.2.3.tgz", - "integrity": "sha512-QO0A9aE6Z/YkmQadJ0syxpmNXtcQiu0qAtCKYKD5cS3EfgfFTAXfgLX6AOaBrSfWSek5nfsMf3gBZ9KGVFcLuw==", - "dev": true, - "requires": { - "is-buffer": "^2.0.0", - "vfile": "^5.1.0" - } - }, "too-wordy": { "version": "0.3.4", "resolved": "https://registry.npmjs.org/too-wordy/-/too-wordy-0.3.4.tgz", "integrity": "sha512-EU+UA4zHc06TkVQaravNNVdqX763/ENTIOKiKlqSJ6WKCPwLxHjvY3d0uEJYaq92iojyHPwD2iaYbZKjdw3icA==", "dev": true }, + "trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "dev": true + }, "trough": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", @@ -10851,9 +27565,9 @@ }, "dependencies": { "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "peer": true, "requires": { @@ -10913,51 +27627,126 @@ } }, "unified-args": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-9.0.2.tgz", - "integrity": "sha512-qSqryjoqfJSII4E4Z2Jx7MhXX2MuUIn6DsrlmL8UnWFdGtrWvEtvm7Rx5fKT5TPUz7q/Fb4oxwIHLCttvAuRLQ==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/unified-args/-/unified-args-11.0.0.tgz", + "integrity": "sha512-4q3OQ2EbNIaxVX1pMoB/QdFxw9BSOWBGUwn5LK3UJict+6i0ud18A1DZ177+2r5hC2nYFOw1jbCp27ydl44Zhg==", "dev": true, "requires": { "@types/text-table": "^0.2.0", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", + "chalk": "^5.0.0", "chokidar": "^3.0.0", - "fault": "^2.0.0", + "comma-separated-tokens": "^2.0.0", "json5": "^2.0.0", "minimist": "^1.0.0", + "strip-ansi": "^7.0.0", "text-table": "^0.2.0", - "unified-engine": "^9.0.0" + "unified-engine": "^11.0.0" + }, + "dependencies": { + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + } } }, "unified-engine": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-9.0.5.tgz", - "integrity": "sha512-frQ6lUNlkTwVC0JELJqSSITpE7MLrLJqAWmDrUFj5Do6A4/3n6eX5Jyg8fhe4Dbwwh38spqUJd39FtRFG34QWg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/unified-engine/-/unified-engine-11.1.0.tgz", + "integrity": "sha512-RS3K5PgNjDRQN9eNIefLUDxpfyWIItmKcjBhD1VnYYT/h7xpheZoZBtb5gtwFyKWZlhKCGRVQknIm1M8qHZfIg==", "dev": true, "requires": { - "@types/concat-stream": "^1.0.0", + "@types/concat-stream": "^2.0.0", "@types/debug": "^4.0.0", "@types/is-empty": "^1.0.0", - "@types/js-yaml": "^4.0.0", - "@types/node": "^17.0.0", - "@types/unist": "^2.0.0", + "@types/node": "^20.0.0", + "@types/unist": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", "concat-stream": "^2.0.0", "debug": "^4.0.0", - "fault": "^2.0.0", - "glob": "^7.0.0", + "glob": "^10.0.0", "ignore": "^5.0.0", - "is-buffer": "^2.0.0", "is-empty": "^1.0.0", "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", - "load-plugin": "^4.0.0", - "parse-json": "^6.0.0", - "to-vfile": "^7.0.0", + "load-plugin": "^5.0.0", + "parse-json": "^7.0.0", "trough": "^2.0.0", - "unist-util-inspect": "^7.0.0", - "vfile-message": "^3.0.0", - "vfile-reporter": "^7.0.0", - "vfile-statistics": "^2.0.0" + "unist-util-inspect": "^8.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0", + "vfile-reporter": "^8.0.0", + "vfile-statistics": "^3.0.0", + "yaml": "^2.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, "unified-lint-rule": { @@ -10973,38 +27762,85 @@ } }, "unified-message-control": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-4.0.0.tgz", - "integrity": "sha512-1b92N+VkPHftOsvXNOtkJm4wHlr+UDmTBF2dUzepn40oy9NxanJ9xS1RwUBTjXJwqr2K0kMbEyv1Krdsho7+Iw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unified-message-control/-/unified-message-control-5.0.0.tgz", + "integrity": "sha512-B2cSAkpuMVVmPP90KCfKdBhm1e9KYJ+zK3x5BCa0N65zpq1Ybkc9C77+M5qwR8FWO7RF3LM5QRRPZtgjW6DUCw==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit": "^3.0.0", - "vfile": "^5.0.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "vfile-message": "^4.0.0" }, "dependencies": { + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, "unist-util-visit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-3.1.0.tgz", - "integrity": "sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0", - "unist-util-visit-parents": "^4.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" } }, "unist-util-visit-parents": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-4.1.1.tgz", - "integrity": "sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^5.0.0" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" } } } @@ -11016,12 +27852,20 @@ "dev": true }, "unist-util-inspect": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-7.0.0.tgz", - "integrity": "sha512-2Utgv78I7PUu461Y9cdo+IUiiKSKpDV5CE/XD6vTj849a3xlpDAScvSJ6cQmtFBGgAmCn2wR7jLuXhpg1XLlJw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.0.0.tgz", + "integrity": "sha512-/3Wn/wU6/H6UEo4FoYUeo8KUePN8ERiZpQYFWYoihOsr1DoDuv80PeB0hobVZyYSvALa2e556bG1A1/AbwU4yg==", "dev": true, "requires": { - "@types/unist": "^2.0.0" + "@types/unist": "^3.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + } } }, "unist-util-is": { @@ -11039,12 +27883,78 @@ "object-assign": "^4.0.1" } }, + "unist-util-modify-children": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-modify-children/-/unist-util-modify-children-4.0.0.tgz", + "integrity": "sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "array-iterate": "^2.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + } + } + }, "unist-util-position": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==", "dev": true }, + "unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + } + } + }, "unist-util-stringify-position": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", @@ -11107,6 +28017,23 @@ "unist-util-visit-parents": "^5.0.0" } }, + "unist-util-visit-children": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit-children/-/unist-util-visit-children-3.0.0.tgz", + "integrity": "sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + } + } + }, "unist-util-visit-parents": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.0.tgz", @@ -11127,33 +28054,12 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uvu": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.3.tgz", - "integrity": "sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==", - "dev": true, - "requires": { - "dequal": "^2.0.0", - "diff": "^5.0.0", - "kleur": "^4.0.3", - "sade": "^1.7.3" - } - }, "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", @@ -11174,13 +28080,51 @@ } }, "vfile-location": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.0.1.tgz", - "integrity": "sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz", + "integrity": "sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==", "dev": true, "requires": { - "@types/unist": "^2.0.0", - "vfile": "^5.0.0" + "@types/unist": "^3.0.0", + "vfile": "^6.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, "vfile-message": { @@ -11194,45 +28138,167 @@ } }, "vfile-reporter": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-7.0.3.tgz", - "integrity": "sha512-q+ruTWxFHbow359TDqoNJn5THdwRDeV+XUOtzdT/OESgaGw05CjL68ImlbzRzqS5xL62Y1IaIWb8x+RbaNjayA==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-8.1.0.tgz", + "integrity": "sha512-NfHyHdkCcy0BsXiLA3nId29TY7W7hgpc8nd8Soe3imATx5N4/+mkLYdMR+Y6Zvu6BXMMi0FZsD4FLCm1dN85Pg==", "dev": true, "requires": { "@types/supports-color": "^8.0.0", - "string-width": "^5.0.0", + "string-width": "^6.0.0", "supports-color": "^9.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-sort": "^3.0.0", - "vfile-statistics": "^2.0.0" + "unist-util-stringify-position": "^4.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0", + "vfile-sort": "^4.0.0", + "vfile-statistics": "^3.0.0" }, "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, "supports-color": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.1.tgz", - "integrity": "sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", "dev": true + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } } } }, "vfile-sort": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-3.0.0.tgz", - "integrity": "sha512-fJNctnuMi3l4ikTVcKpxTbzHeCgvDhnI44amA3NVDvA6rTC6oKCFpCVyT5n2fFMr3ebfr+WVQZedOCd73rzSxg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-4.0.0.tgz", + "integrity": "sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==", "dev": true, "requires": { - "vfile-message": "^3.0.0" + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, "vfile-statistics": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-2.0.0.tgz", - "integrity": "sha512-foOWtcnJhKN9M2+20AOTlWi2dxNfAoeNIoxD5GXcO182UJyId4QrXa41fWrgcfV3FWTjdEDy3I4cpLVcQscIMA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-3.0.0.tgz", + "integrity": "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==", "dev": true, "requires": { - "vfile-message": "^3.0.0" + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.0.tgz", + "integrity": "sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0" + } + }, + "vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dev": true, + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + } } }, + "walk-up-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true + }, "weasel-words": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/weasel-words/-/weasel-words-0.1.1.tgz", @@ -11244,7 +28310,6 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "peer": true, "requires": { "isexe": "^2.0.0" } @@ -11264,12 +28329,87 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true, "peer": true }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, "wrapped": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wrapped/-/wrapped-1.0.1.tgz", @@ -11307,6 +28447,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true + }, "zwitch": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.2.tgz", diff --git a/package.json b/package.json index e441d81ab4..95fb28412b 100644 --- a/package.json +++ b/package.json @@ -28,73 +28,76 @@ }, "homepage": "https://gitversion.net", "devDependencies": { - "remark": "^14.0.2", - "remark-cli": "^10.0.1", - "remark-frontmatter": "^4.0.1", - "remark-heading-gap": "^5.0.1", - "remark-lint": "^9.1.1", - "remark-lint-blockquote-indentation": "^3.1.1", - "remark-lint-checkbox-character-style": "^4.1.1", - "remark-lint-checkbox-content-indent": "^4.1.1", + "remark": "^15.0.1", + "remark-cli": "^12.0.1", + "remark-frontmatter": "^5.0.0", + "remark-heading-gap": "^6.0.0", + "remark-lint": "^10.0.0", + "remark-lint-blockquote-indentation": "^4.0.0", + "remark-lint-checkbox-character-style": "^5.0.0", + "remark-lint-checkbox-content-indent": "^5.0.0", "remark-lint-code": "^2.0.0", - "remark-lint-code-block-style": "^3.1.0", - "remark-lint-definition-case": "^3.1.1", - "remark-lint-definition-spacing": "^3.1.1", - "remark-lint-fenced-code-flag": "^3.1.1", - "remark-lint-fenced-code-marker": "^3.1.1", - "remark-lint-file-extension": "^2.1.1", - "remark-lint-final-definition": "^3.1.1", - "remark-lint-final-newline": "^2.1.1", - "remark-lint-hard-break-spaces": "^3.1.1", - "remark-lint-heading-increment": "^3.1.1", - "remark-lint-heading-style": "^3.1.1", + "remark-lint-code-block-style": "^4.0.0", + "remark-lint-definition-case": "^4.0.0", + "remark-lint-definition-spacing": "^4.0.0", + "remark-lint-fenced-code-flag": "^4.0.0", + "remark-lint-fenced-code-marker": "^4.0.0", + "remark-lint-file-extension": "^3.0.0", + "remark-lint-final-definition": "^4.0.1", + "remark-lint-final-newline": "^3.0.0", + "remark-lint-hard-break-spaces": "^4.0.0", + "remark-lint-heading-increment": "^4.0.0", + "remark-lint-heading-style": "^4.0.0", "remark-lint-heading-whitespace": "^1.0.0", - "remark-lint-link-title-style": "^3.1.1", - "remark-lint-list-item-bullet-indent": "^4.1.1", - "remark-lint-list-item-content-indent": "^3.1.1", - "remark-lint-list-item-indent": "^3.1.1", - "remark-lint-maximum-heading-length": "^3.1.1", - "remark-lint-no-auto-link-without-protocol": "^3.1.1", - "remark-lint-no-blockquote-without-marker": "^5.1.1", - "remark-lint-no-consecutive-blank-lines": "^4.1.2", + "remark-lint-link-title-style": "^4.0.0", + "remark-lint-list-item-bullet-indent": "^5.0.0", + "remark-lint-list-item-content-indent": "^4.0.0", + "remark-lint-list-item-indent": "^4.0.0", + "remark-lint-maximum-heading-length": "^4.0.0", + "remark-lint-no-auto-link-without-protocol": "^3.1.2", + "remark-lint-no-blockquote-without-marker": "^6.0.0", + "remark-lint-no-consecutive-blank-lines": "^5.0.0", "remark-lint-no-dead-urls": "^1.1.0", - "remark-lint-no-duplicate-definitions": "^3.1.1", - "remark-lint-no-duplicate-headings": "^3.1.1", - "remark-lint-no-emphasis-as-heading": "^3.1.1", + "remark-lint-no-duplicate-definitions": "^4.0.0", + "remark-lint-no-duplicate-headings": "^4.0.0", + "remark-lint-no-emphasis-as-heading": "^4.0.0", "remark-lint-no-empty-sections": "^4.0.0", - "remark-lint-no-empty-url": "^3.1.1", - "remark-lint-no-file-name-articles": "^2.1.1", - "remark-lint-no-file-name-consecutive-dashes": "^2.1.1", - "remark-lint-no-file-name-irregular-characters": "^2.1.1", - "remark-lint-no-file-name-mixed-case": "^2.1.1", - "remark-lint-no-file-name-outer-dashes": "^2.1.1", - "remark-lint-no-heading-content-indent": "^4.1.1", - "remark-lint-no-heading-indent": "^4.1.1", - "remark-lint-no-heading-like-paragraph": "^3.1.1", - "remark-lint-no-inline-padding": "^4.1.1", - "remark-lint-no-literal-urls": "^3.1.1", - "remark-lint-no-multiple-toplevel-headings": "^3.1.1", - "remark-lint-no-reference-like-url": "^3.1.1", + "remark-lint-no-empty-url": "^4.0.0", + "remark-lint-no-file-name-articles": "^3.0.0", + "remark-lint-no-file-name-consecutive-dashes": "^3.0.0", + "remark-lint-no-file-name-irregular-characters": "^3.0.0", + "remark-lint-no-file-name-mixed-case": "^3.0.0", + "remark-lint-no-file-name-outer-dashes": "^3.0.0", + "remark-lint-no-heading-content-indent": "^5.0.0", + "remark-lint-no-heading-indent": "^5.0.0", + "remark-lint-no-heading-like-paragraph": "^4.0.0", + "remark-lint-no-inline-padding": "^4.1.2", + "remark-lint-no-literal-urls": "^4.0.0", + "remark-lint-no-multiple-toplevel-headings": "^4.0.0", + "remark-lint-no-reference-like-url": "^4.0.0", "remark-lint-no-repeat-punctuation": "^0.1.4", - "remark-lint-no-shell-dollars": "^3.1.1", - "remark-lint-no-shortcut-reference-image": "^3.1.1", - "remark-lint-no-table-indentation": "^4.1.1", - "remark-lint-no-tabs": "^3.1.1", - "remark-lint-no-unused-definitions": "^3.1.1", - "remark-lint-ordered-list-marker-style": "^3.1.1", - "remark-lint-ordered-list-marker-value": "^3.1.1", - "remark-lint-rule-style": "^3.1.1", - "remark-lint-strong-marker": "^3.1.1", - "remark-lint-table-cell-padding": "^4.1.2", - "remark-lint-table-pipe-alignment": "^3.1.1", - "remark-lint-table-pipes": "^4.1.1", - "remark-lint-unordered-list-marker-style": "^3.1.1", + "remark-lint-no-shell-dollars": "^4.0.0", + "remark-lint-no-shortcut-reference-image": "^4.0.0", + "remark-lint-no-table-indentation": "^5.0.0", + "remark-lint-no-tabs": "^4.0.0", + "remark-lint-no-unused-definitions": "^4.0.0", + "remark-lint-ordered-list-marker-style": "^4.0.0", + "remark-lint-ordered-list-marker-value": "^4.0.0", + "remark-lint-rule-style": "^4.0.0", + "remark-lint-strong-marker": "^4.0.0", + "remark-lint-table-cell-padding": "^5.0.0", + "remark-lint-table-pipe-alignment": "^4.0.0", + "remark-lint-table-pipes": "^5.0.0", + "remark-lint-unordered-list-marker-style": "^4.0.0", "remark-lint-write-good": "^1.2.0", - "remark-preset-lint-consistent": "^5.1.1", - "remark-preset-lint-markdown-style-guide": "^5.1.2", - "remark-preset-lint-recommended": "^6.1.2", - "remark-retext": "^5.0.1", - "remark-textr": "^5.0.1", - "remark-validate-links": "^11.0.2" + "remark-preset-lint-consistent": "^6.0.0", + "remark-preset-lint-markdown-style-guide": "^6.0.0", + "remark-preset-lint-recommended": "^7.0.0", + "remark-retext": "^6.0.0", + "remark-textr": "^6.1.0", + "remark-validate-links": "^13.0.1" + }, + "overrides": { + "got": "^11.8.5" } } diff --git a/schemas/5.12/GitVersion.configuration.json b/schemas/5.12/GitVersion.configuration.json new file mode 100644 index 0000000000..cdeaf454af --- /dev/null +++ b/schemas/5.12/GitVersion.configuration.json @@ -0,0 +1,467 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://gitversion.net/schemas/5.12/GitVersion.configuration.json", + "title": "GitVersion Configuration", + "description": "GitVersion configuration schema", + "type": "object", + "properties": { + "assembly-file-versioning-format": { + "description": "Specifies the format of AssemblyFileVersion and overwrites the value of assembly-file-versioning-scheme.", + "type": "string" + }, + "assembly-file-versioning-scheme": { + "description": "The scheme to use when setting AssemblyFileVersion attribute. Can be \u0027MajorMinorPatchTag\u0027, \u0027MajorMinorPatch\u0027, \u0027MajorMinor\u0027, \u0027Major\u0027, \u0027None\u0027.", + "enum": [ + "MajorMinorPatchTag", + "MajorMinorPatch", + "MajorMinor", + "Major", + "None" + ] + }, + "assembly-informational-format": { + "description": "Specifies the format of AssemblyInformationalVersion. The default value is {InformationalVersion}.", + "type": "string" + }, + "assembly-versioning-format": { + "description": "Specifies the format of AssemblyVersion and overwrites the value of assembly-versioning-scheme.", + "type": "string" + }, + "assembly-versioning-scheme": { + "description": "The scheme to use when setting AssemblyVersion attribute. Can be \u0027MajorMinorPatchTag\u0027, \u0027MajorMinorPatch\u0027, \u0027MajorMinor\u0027, \u0027Major\u0027, \u0027None\u0027.", + "enum": [ + "MajorMinorPatchTag", + "MajorMinorPatch", + "MajorMinor", + "Major", + "None" + ] + }, + "branches": { + "description": "The header for all the individual branch configuration.", + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/BranchConfig" + } + }, + "build-metadata-padding": { + "type": [ + "integer", + "null" + ] + }, + "commit-date-format": { + "format": "date-time", + "pattern": "\u0027yyyy-MM-dd\u0027", + "description": "The format to use when calculating the commit date. Defaults to \u0027yyyy-MM-dd\u0027.", + "type": "string" + }, + "commit-message-incrementing": { + "enum": [ + "Enabled", + "Disabled", + "MergeMessageOnly" + ] + }, + "commits-since-version-source-padding": { + "type": [ + "integer", + "null" + ] + }, + "continuous-delivery-fallback-tag": { + "type": "string" + }, + "ignore": { + "description": "The header property for the ignore configuration.", + "type": "object", + "properties": { + "commits-before": { + "$ref": "#/$defs/Nullable\u006012" + }, + "sha": { + "$ref": "#/$defs/array" + } + } + }, + "increment": { + "$ref": "#/$defs/Nullable\u00601" + }, + "legacy-semver-padding": { + "type": [ + "integer", + "null" + ] + }, + "major-version-bump-message": { + "format": "regex", + "pattern": "\u0027\\\u002Bsemver:\\s?(breaking|major)\u0027", + "description": "The regex to match commit messages with to perform a major version increment. Default set to \u0027\\\u002Bsemver:\\s?(breaking|major)\u0027", + "type": "string" + }, + "merge-message-formats": { + "description": "Custom merge message formats to enable identification of merge messages that do not follow the built-in conventions.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "minor-version-bump-message": { + "format": "regex", + "pattern": "\u0027\\\u002Bsemver:\\s?(feature|minor)\u0027", + "description": "The regex to match commit messages with to perform a minor version increment. Default set to \u0027\\\u002Bsemver:\\s?(feature|minor)\u0027", + "type": "string" + }, + "next-version": { + "description": "Allows you to bump the next version explicitly. Useful for bumping main or a feature branch with breaking changes", + "type": "string" + }, + "no-bump-message": { + "format": "regex", + "pattern": "\u0027\\\u002Bsemver:\\s?(none|skip)\u0027", + "description": "Used to tell GitVersion not to increment when in Mainline development mode. . Default set to \u0027\\\u002Bsemver:\\s?(none|skip)\u0027", + "type": "string" + }, + "patch-version-bump-message": { + "format": "regex", + "pattern": "\u0027\\\u002Bsemver:\\s?(fix|patch)\u0027", + "description": "The regex to match commit messages with to perform a patch version increment. Default set to \u0027\\\u002Bsemver:\\s?(fix|patch)\u0027", + "type": "string" + }, + "tag-prefix": { + "description": "A regex which is used to trim Git tags before processing. Defaults to [vV]", + "type": "string" + }, + "tag-pre-release-weight": { + "description": "The pre-release weight in case of tagged commits. Defaults to 60000.", + "type": [ + "integer", + "null" + ] + }, + "update-build-number": { + "description": "Whether to update the build number in the project file. Defaults to true.", + "type": [ + "boolean", + "null" + ] + }, + "mode": { + "$ref": "#/$defs/Nullable\u006011" + } + }, + "$defs": { + "BranchConfig": { + "type": "object", + "properties": { + "commit-message-incrementing": { + "description": "Sets whether it should be possible to increment the version with special syntax in the commit message. Can be \u0027Disabled\u0027, \u0027Enabled\u0027 or \u0027MergeMessageOnly\u0027.", + "enum": [ + "Enabled", + "Disabled", + "MergeMessageOnly" + ] + }, + "increment": { + "$ref": "#/$defs/Nullable\u00601" + }, + "is-mainline": { + "description": "When using Mainline mode, this indicates that this branch is a mainline. By default main and support/* are mainlines.", + "type": [ + "boolean", + "null" + ] + }, + "is-release-branch": { + "description": "Indicates this branch config represents a release branch in GitFlow.", + "type": [ + "boolean", + "null" + ] + }, + "is-source-branch-for": { + "description": "The branches that this branch is a source branch.", + "type": "array", + "items": { + "description": "The branches that this branch is a source branch.", + "type": "string" + } + }, + "pre-release-weight": { + "description": "Provides a way to translate the PreReleaseLabel to a number.", + "type": [ + "integer", + "null" + ] + }, + "prevent-increment-of-merged-branch-version": { + "description": "Prevent increment of merged branch version.", + "type": [ + "boolean", + "null" + ] + }, + "regex": { + "description": "The regex pattern to use to match this branch.", + "type": "string" + }, + "source-branches": { + "description": "The source branches for this branch.", + "type": "array", + "items": { + "description": "The source branches for this branch.", + "type": "string" + } + }, + "tag": { + "description": "The label to use for this branch. Can be \u0027useBranchName\u0027 to extract the label from the branch name.", + "type": "string" + }, + "tag-number-pattern": { + "format": "regex", + "pattern": "[/-](?\u003Cnumber\u003E\\d\u002B)[-/]", + "description": "The regex pattern to use to extract the number from the branch name. Defaults to \u0027[/-](?\u003Cnumber\u003E\\d\u002B)[-/]\u0027.", + "type": "string" + }, + "track-merge-target": { + "description": "Strategy which will look for tagged merge commits directly off the current branch.", + "type": [ + "boolean", + "null" + ] + }, + "tracks-release-branches": { + "description": "Indicates this branch config represents develop in GitFlow.", + "type": [ + "boolean", + "null" + ] + }, + "mode": { + "$ref": "#/$defs/Nullable\u006011" + } + } + }, + "Nullable\u00601": { + "description": "The increment strategy for this branch. Can be \u0027Inherit\u0027, \u0027Patch\u0027, \u0027Minor\u0027, \u0027Major\u0027, \u0027None\u0027.", + "enum": [ + "None", + "Major", + "Minor", + "Patch", + "Inherit" + ] + }, + "Nullable\u006011": { + "description": "The versioning mode for this branch. Can be \u0027ContinuousDelivery\u0027, \u0027ContinuousDeployment\u0027, \u0027Mainline\u0027.", + "enum": [ + "ContinuousDelivery", + "ContinuousDeployment", + "Mainline" + ] + }, + "DateTimeOffset": { + "type": [ + "object", + "null" + ], + "properties": { + "date": { + "$ref": "#/$defs/DateTime" + }, + "date-time": { + "$ref": "#/$defs/DateTime" + }, + "day": { + "$ref": "#/$defs/integer" + }, + "day-of-week": { + "enum": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "readOnly": true + }, + "day-of-year": { + "$ref": "#/$defs/integer" + }, + "hour": { + "$ref": "#/$defs/integer" + }, + "local-date-time": { + "$ref": "#/$defs/DateTime" + }, + "millisecond": { + "$ref": "#/$defs/integer" + }, + "minute": { + "$ref": "#/$defs/integer" + }, + "month": { + "$ref": "#/$defs/integer" + }, + "offset": { + "$ref": "#/$defs/TimeSpan" + }, + "second": { + "$ref": "#/$defs/integer" + }, + "ticks": { + "$ref": "#/$defs/integer1" + }, + "time-of-day": { + "$ref": "#/$defs/TimeSpan" + }, + "utc-date-time": { + "$ref": "#/$defs/DateTime" + }, + "utc-ticks": { + "$ref": "#/$defs/integer1" + }, + "year": { + "$ref": "#/$defs/integer" + } + } + }, + "DateTime": { + "type": "string", + "format": "date-time", + "readOnly": true + }, + "integer": { + "type": "integer", + "readOnly": true + }, + "integer1": { + "type": "integer", + "readOnly": true + }, + "number": { + "type": "number", + "readOnly": true + }, + "TimeSpan": { + "type": "object", + "properties": { + "days": { + "$ref": "#/$defs/integer" + }, + "hours": { + "$ref": "#/$defs/integer" + }, + "milliseconds": { + "$ref": "#/$defs/integer" + }, + "minutes": { + "$ref": "#/$defs/integer" + }, + "seconds": { + "$ref": "#/$defs/integer" + }, + "ticks": { + "$ref": "#/$defs/integer1" + }, + "total-days": { + "$ref": "#/$defs/number" + }, + "total-hours": { + "$ref": "#/$defs/number" + }, + "total-milliseconds": { + "$ref": "#/$defs/number" + }, + "total-minutes": { + "$ref": "#/$defs/number" + }, + "total-seconds": { + "$ref": "#/$defs/number" + } + }, + "readOnly": true + }, + "Nullable\u006012": { + "format": "date-time", + "pattern": "\u0027yyyy-MM-ddTHH:mm:ss\u0027", + "description": "Commits before this date will be ignored. Format: yyyy-MM-ddTHH:mm:ss.", + "type": [ + "object", + "null" + ], + "properties": { + "date": { + "$ref": "#/$defs/DateTime" + }, + "date-time": { + "$ref": "#/$defs/DateTime" + }, + "day": { + "$ref": "#/$defs/integer" + }, + "day-of-week": { + "enum": [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ], + "readOnly": true + }, + "day-of-year": { + "$ref": "#/$defs/integer" + }, + "hour": { + "$ref": "#/$defs/integer" + }, + "local-date-time": { + "$ref": "#/$defs/DateTime" + }, + "millisecond": { + "$ref": "#/$defs/integer" + }, + "minute": { + "$ref": "#/$defs/integer" + }, + "month": { + "$ref": "#/$defs/integer" + }, + "offset": { + "$ref": "#/$defs/TimeSpan" + }, + "second": { + "$ref": "#/$defs/integer" + }, + "ticks": { + "$ref": "#/$defs/integer1" + }, + "time-of-day": { + "$ref": "#/$defs/TimeSpan" + }, + "utc-date-time": { + "$ref": "#/$defs/DateTime" + }, + "utc-ticks": { + "$ref": "#/$defs/integer1" + }, + "year": { + "$ref": "#/$defs/integer" + } + } + }, + "array": { + "description": "A sequence of SHAs to be excluded from the version calculations.", + "type": "array", + "items": { + "description": "A sequence of SHAs to be excluded from the version calculations.", + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/schemas/5.12/GitVersion.json b/schemas/5.12/GitVersion.json new file mode 100644 index 0000000000..2251b3f712 --- /dev/null +++ b/schemas/5.12/GitVersion.json @@ -0,0 +1,165 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://gitversion.net/schemas/5.12/GitVersion.json", + "title": "GitVersion version variables output", + "description": "GitVersion output schema", + "type": "object", + "properties": { + "AssemblySemFileVer": { + "description": "Suitable for .NET AssemblyFileVersion. Defaults to Major.Minor.Patch.0.", + "type": "string" + }, + "AssemblySemVer": { + "description": "Suitable for .NET AssemblyVersion. Defaults to Major.Minor.0.0", + "type": "string" + }, + "BranchName": { + "description": "The name of the checked out Git branch.", + "type": "string" + }, + "BuildMetaData": { + "description": "The build metadata, usually representing number of commits since the VersionSourceSha.", + "type": [ + "integer", + "null" + ] + }, + "BuildMetaDataPadded": { + "description": "The BuildMetaData padded with 0 up to 4 digits.", + "type": "string" + }, + "CommitDate": { + "description": "The ISO-8601 formatted date of the commit identified by Sha.", + "type": "string" + }, + "CommitsSinceVersionSource": { + "description": "The number of commits since the version source.", + "type": [ + "integer", + "null" + ] + }, + "CommitsSinceVersionSourcePadded": { + "description": "The CommitsSinceVersionSource padded with 0 up to 4 digits.", + "type": "string" + }, + "EscapedBranchName": { + "description": "Equal to BranchName, but with / replaced with -.", + "type": "string" + }, + "FullBuildMetaData": { + "description": "The BuildMetaData suffixed with BranchName and Sha.", + "type": "string" + }, + "FullSemVer": { + "description": "The full, SemVer 2.0 compliant version number.", + "type": "string" + }, + "InformationalVersion": { + "description": "Suitable for .NET AssemblyInformationalVersion. Defaults to FullSemVer suffixed by FullBuildMetaData.", + "type": "string" + }, + "LegacySemVer": { + "description": "Equal to SemVer, but without a . separating PreReleaseLabel and PreReleaseNumber.", + "type": "string" + }, + "LegacySemVerPadded": { + "description": "Equal to LegacySemVer, but with PreReleaseNumber padded with 0 up to 4 digits.", + "type": "string" + }, + "Major": { + "description": "The major version. Should be incremented on breaking changes.", + "type": [ + "integer", + "null" + ] + }, + "MajorMinorPatch": { + "description": "Major, Minor and Patch joined together, separated by \u0027.\u0027.", + "type": "string" + }, + "Minor": { + "description": "The minor version. Should be incremented on new features.", + "type": [ + "integer", + "null" + ] + }, + "NuGetPreReleaseTag": { + "description": "A NuGet 1.0 compatible PreReleaseTag.", + "type": "string" + }, + "NuGetPreReleaseTagV2": { + "description": "A NuGet 2.0 compatible PreReleaseTag.", + "type": "string" + }, + "NuGetVersion": { + "description": "A NuGet 1.0 compatible version number.", + "type": "string" + }, + "NuGetVersionV2": { + "description": "A NuGet 2.0 compatible version number.", + "type": "string" + }, + "Patch": { + "description": "The patch version. Should be incremented on bug fixes.", + "type": [ + "integer", + "null" + ] + }, + "PreReleaseLabel": { + "description": "The pre-release label is the name of the pre-release.", + "type": "string" + }, + "PreReleaseLabelWithDash": { + "description": "The pre-release label prefixed with a dash.", + "type": "string" + }, + "PreReleaseNumber": { + "description": "The pre-release number is the number of commits since the last version bump.", + "type": [ + "integer", + "null" + ] + }, + "PreReleaseTag": { + "description": "The pre-release tag is the pre-release label suffixed by the PreReleaseNumber.", + "type": "string" + }, + "PreReleaseTagWithDash": { + "description": "The pre-release tag prefixed with a dash.", + "type": "string" + }, + "SemVer": { + "description": "The semantic version number, including PreReleaseTagWithDash for pre-release version numbers.", + "type": "string" + }, + "Sha": { + "description": "The SHA of the Git commit.", + "type": "string" + }, + "ShortSha": { + "description": "The Sha limited to 7 characters.", + "type": "string" + }, + "UncommittedChanges": { + "description": "The number of uncommitted changes present in the repository.", + "type": [ + "integer", + "null" + ] + }, + "VersionSourceSha": { + "description": "The SHA of the commit used as version source.", + "type": "string" + }, + "WeightedPreReleaseNumber": { + "description": "A summation of branch specific pre-release-weight and the PreReleaseNumber. Can be used to obtain a monotonically increasing version number across the branches.", + "type": [ + "integer", + "null" + ] + } + } +} \ No newline at end of file diff --git a/schemas/6.0/GitVersion.configuration.json b/schemas/6.0/GitVersion.configuration.json new file mode 100644 index 0000000000..3f8e0f3290 --- /dev/null +++ b/schemas/6.0/GitVersion.configuration.json @@ -0,0 +1,394 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://gitversion.net/schemas/6.0/GitVersion.configuration.json", + "title": "GitVersion Configuration (6.0)", + "description": "GitVersion configuration schema (6.0)", + "type": "object", + "properties": { + "assembly-file-versioning-format": { + "description": "Specifies the format of AssemblyFileVersion and overwrites the value of assembly-file-versioning-scheme.", + "type": "string" + }, + "assembly-file-versioning-scheme": { + "description": "The scheme to use when setting AssemblyFileVersion attribute. Can be 'MajorMinorPatchTag', 'MajorMinorPatch', 'MajorMinor', 'Major', 'None'. Defaults to 'MajorMinorPatch'.", + "default": "MajorMinorPatch", + "enum": [ + "MajorMinorPatchTag", + "MajorMinorPatch", + "MajorMinor", + "Major", + "None" + ] + }, + "assembly-informational-format": { + "description": "Specifies the format of AssemblyInformationalVersion. Defaults to '{InformationalVersion}'.", + "default": "'{InformationalVersion}'", + "type": "string" + }, + "assembly-versioning-format": { + "description": "Specifies the format of AssemblyVersion and overwrites the value of assembly-versioning-scheme.", + "type": "string" + }, + "assembly-versioning-scheme": { + "description": "The scheme to use when setting AssemblyVersion attribute. Can be 'MajorMinorPatchTag', 'MajorMinorPatch', 'MajorMinor', 'Major', 'None'. Defaults to 'MajorMinorPatch'.", + "default": "MajorMinorPatch", + "enum": [ + "MajorMinorPatchTag", + "MajorMinorPatch", + "MajorMinor", + "Major", + "None" + ] + }, + "branches": { + "description": "The header for all the individual branch configuration.", + "type": "object", + "additionalProperties": { + "$ref": "#/$defs/branchConfiguration" + } + }, + "commit-date-format": { + "description": "The format to use when calculating the commit date. Defaults to 'yyyy-MM-dd'. See [Standard Date and Time Format Strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings) and [Custom Date and Time Format Strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings).", + "default": "yyyy-MM-dd", + "type": "string" + }, + "commit-message-incrementing": { + "$ref": "#/$defs/nullableOfCommitMessageIncrementMode" + }, + "mode": { + "$ref": "#/$defs/nullableOfDeploymentMode" + }, + "ignore": { + "description": "The header property for the ignore configuration.", + "type": "object", + "properties": { + "commits-before": { + "$ref": "#/$defs/string3" + }, + "sha": { + "$ref": "#/$defs/hashSetOfString2" + } + } + }, + "increment": { + "$ref": "#/$defs/incrementStrategy" + }, + "is-main-branch": { + "$ref": "#/$defs/nullableOfBoolean" + }, + "is-release-branch": { + "$ref": "#/$defs/nullableOfBoolean1" + }, + "is-source-branch-for": { + "$ref": "#/$defs/hashSetOfString" + }, + "label": { + "$ref": "#/$defs/string" + }, + "label-number-pattern": { + "$ref": "#/$defs/string1" + }, + "major-version-bump-message": { + "format": "regex", + "description": "The regular expression to match commit messages with to perform a major version increment. Defaults to '\\+semver:\\s?(breaking|major)'", + "default": "\\+semver:\\s?(breaking|major)", + "type": "string" + }, + "merge-message-formats": { + "description": "Custom merge message formats to enable identification of merge messages that do not follow the built-in conventions.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "minor-version-bump-message": { + "format": "regex", + "description": "The regular expression to match commit messages with to perform a minor version increment. Defaults to '\\+semver:\\s?(feature|minor)'", + "default": "\\+semver:\\s?(feature|minor)", + "type": "string" + }, + "next-version": { + "description": "Allows you to bump the next version explicitly. Useful for bumping main or a feature branch with breaking changes", + "type": "string" + }, + "no-bump-message": { + "format": "regex", + "description": "Used to tell GitVersion not to increment when in Mainline development mode. Defaults to '\\+semver:\\s?(none|skip)'", + "default": "\\+semver:\\s?(none|skip)", + "type": "string" + }, + "patch-version-bump-message": { + "format": "regex", + "description": "The regular expression to match commit messages with to perform a patch version increment. Defaults to '\\+semver:\\s?(fix|patch)'", + "default": "\\+semver:\\s?(fix|patch)", + "type": "string" + }, + "pre-release-weight": { + "$ref": "#/$defs/nullableOfInt32" + }, + "prevent-increment": { + "$ref": "#/$defs/preventIncrementConfiguration" + }, + "regex": { + "$ref": "#/$defs/string2" + }, + "semantic-version-format": { + "description": "Specifies the semantic version format that is used when parsing the string. Can be 'Strict' or 'Loose'. Defaults to 'Strict'.", + "default": "Strict", + "enum": [ + "Strict", + "Loose" + ] + }, + "source-branches": { + "$ref": "#/$defs/hashSetOfString1" + }, + "tag-prefix": { + "format": "regex", + "description": "A regular expression which is used to trim Git tags before processing. Defaults to '[vV]?'", + "default": "[vV]?", + "type": "string" + }, + "tag-pre-release-weight": { + "description": "The pre-release weight in case of tagged commits. Defaults to 60000.", + "type": [ + "integer", + "null" + ] + }, + "track-merge-message": { + "$ref": "#/$defs/nullableOfBoolean4" + }, + "track-merge-target": { + "$ref": "#/$defs/nullableOfBoolean5" + }, + "tracks-release-branches": { + "$ref": "#/$defs/nullableOfBoolean6" + }, + "update-build-number": { + "description": "Whether to update the build number in the project file. Defaults to true.", + "default": "true", + "type": "boolean" + }, + "version-in-branch-pattern": { + "format": "regex", + "description": "A regular expression which is used to determine the version number in the branch name or commit message (e.g., v1.0.0-LTS). Defaults to '(?[vV]?\\d+(\\.\\d+)?(\\.\\d+)?).*'.", + "default": "(?[vV]?\\d+(\\.\\d+)?(\\.\\d+)?).*", + "type": "string" + }, + "strategies": { + "description": "Specifies which version strategies (one or more) will be used to determine the next version. Following values are available: 'ConfiguredNextVersion', 'MergeMessage', 'TaggedCommit', 'TrackReleaseBranches', 'VersionInBranchName' and 'Mainline'.", + "type": "array", + "items": { + "description": "Specifies which version strategies (one or more) will be used to determine the next version. Following values are available: 'ConfiguredNextVersion', 'MergeMessage', 'TaggedCommit', 'TrackReleaseBranches', 'VersionInBranchName' and 'Mainline'.", + "enum": [ + "None", + "Fallback", + "ConfiguredNextVersion", + "MergeMessage", + "TaggedCommit", + "TrackReleaseBranches", + "VersionInBranchName", + "Mainline" + ] + } + }, + "workflow": { + "description": "The base template of the configuration to use. Possible values are: 'GitFlow/v1' or 'GitHubFlow/v1'", + "type": "string" + } + }, + "$defs": { + "branchConfiguration": { + "type": "object", + "properties": { + "commit-message-incrementing": { + "$ref": "#/$defs/nullableOfCommitMessageIncrementMode" + }, + "mode": { + "$ref": "#/$defs/nullableOfDeploymentMode" + }, + "increment": { + "$ref": "#/$defs/incrementStrategy" + }, + "is-main-branch": { + "$ref": "#/$defs/nullableOfBoolean" + }, + "is-release-branch": { + "$ref": "#/$defs/nullableOfBoolean1" + }, + "is-source-branch-for": { + "$ref": "#/$defs/hashSetOfString" + }, + "label": { + "$ref": "#/$defs/string" + }, + "label-number-pattern": { + "$ref": "#/$defs/string1" + }, + "pre-release-weight": { + "$ref": "#/$defs/nullableOfInt32" + }, + "prevent-increment": { + "$ref": "#/$defs/preventIncrementConfiguration" + }, + "regex": { + "$ref": "#/$defs/string2" + }, + "source-branches": { + "$ref": "#/$defs/hashSetOfString1" + }, + "track-merge-message": { + "$ref": "#/$defs/nullableOfBoolean4" + }, + "track-merge-target": { + "$ref": "#/$defs/nullableOfBoolean5" + }, + "tracks-release-branches": { + "$ref": "#/$defs/nullableOfBoolean6" + } + } + }, + "nullableOfCommitMessageIncrementMode": { + "description": "Sets whether it should be possible to increment the version with special syntax in the commit message. Can be 'Disabled', 'Enabled' or 'MergeMessageOnly'.", + "enum": [ + "Enabled", + "Disabled", + "MergeMessageOnly" + ] + }, + "nullableOfDeploymentMode": { + "description": "The deployment mode for this branch. Can be 'ManualDeployment', 'ContinuousDelivery', 'ContinuousDeployment'.", + "enum": [ + "ManualDeployment", + "ContinuousDelivery", + "ContinuousDeployment" + ] + }, + "incrementStrategy": { + "description": "The increment strategy for this branch. Can be 'Inherit', 'Patch', 'Minor', 'Major', 'None'.", + "enum": [ + "None", + "Major", + "Minor", + "Patch", + "Inherit" + ] + }, + "nullableOfBoolean": { + "description": "When using Mainline mode, this indicates that this branch is a mainline. By default main and support/* are mainlines.", + "type": [ + "boolean", + "null" + ] + }, + "nullableOfBoolean1": { + "description": "Indicates this branch configuration represents a release branch in GitFlow.", + "type": [ + "boolean", + "null" + ] + }, + "hashSetOfString": { + "description": "The branches that this branch is a source branch.", + "type": "array", + "items": { + "description": "The branches that this branch is a source branch.", + "type": "string" + } + }, + "string": { + "description": "The label to use for this branch. Use the value {BranchName} or similar as a placeholder to insert a named capture group from RegularExpression (fx. the branch name).", + "type": "string" + }, + "string1": { + "format": "regex", + "description": "The regular expression pattern to use to extract the number from the branch name. Defaults to '[/-](?\\d+)'.", + "default": "[/-](?\\d+)", + "type": "string" + }, + "nullableOfInt32": { + "description": "Provides a way to translate the PreReleaseLabel to a number.", + "type": [ + "integer", + "null" + ] + }, + "preventIncrementConfiguration": { + "description": "The prevent increment configuration section.", + "type": "object", + "properties": { + "of-merged-branch": { + "$ref": "#/$defs/nullableOfBoolean2" + }, + "when-branch-merged": { + "$ref": "#/$defs/nullableOfBoolean2" + }, + "when-current-commit-tagged": { + "$ref": "#/$defs/nullableOfBoolean3" + } + } + }, + "nullableOfBoolean2": { + "description": "Prevent increment when branch merged.", + "type": [ + "boolean", + "null" + ] + }, + "nullableOfBoolean3": { + "description": "This branch related property controls the behvior whether to use the tagged (value set to true) or the incremented (value set to false) semantic version. Defaults to true.", + "type": [ + "boolean", + "null" + ] + }, + "string2": { + "format": "regex", + "description": "The regular expression pattern to use to match this branch.", + "type": "string" + }, + "hashSetOfString1": { + "description": "The source branches for this branch.", + "type": "array", + "items": { + "description": "The source branches for this branch.", + "type": "string" + } + }, + "nullableOfBoolean4": { + "description": "This property is a branch related property and gives the user the possibility to control the behavior of whether the merge commit message will be interpreted as a next version or not.", + "type": [ + "boolean", + "null" + ] + }, + "nullableOfBoolean5": { + "description": "Strategy which will look for tagged merge commits directly off the current branch.", + "type": [ + "boolean", + "null" + ] + }, + "nullableOfBoolean6": { + "description": "Indicates this branch configuration represents develop in GitFlow.", + "type": [ + "boolean", + "null" + ] + }, + "string3": { + "format": "date-time", + "description": "Commits before this date will be ignored. Format: yyyy-MM-ddTHH:mm:ss.", + "type": "string" + }, + "hashSetOfString2": { + "description": "A sequence of SHAs to be excluded from the version calculations.", + "type": "array", + "items": { + "description": "A sequence of SHAs to be excluded from the version calculations.", + "type": "string" + } + } + } +} \ No newline at end of file diff --git a/schemas/6.0/GitVersion.json b/schemas/6.0/GitVersion.json new file mode 100644 index 0000000000..ef663864a3 --- /dev/null +++ b/schemas/6.0/GitVersion.json @@ -0,0 +1,133 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "$id": "https://gitversion.net/schemas/6.0/GitVersion.json", + "title": "GitVersion version variables output", + "description": "GitVersion output schema", + "type": "object", + "properties": { + "AssemblySemFileVer": { + "description": "Suitable for .NET AssemblyFileVersion. Defaults to Major.Minor.Patch.0.", + "type": "string" + }, + "AssemblySemVer": { + "description": "Suitable for .NET AssemblyVersion. Defaults to Major.Minor.0.0", + "type": "string" + }, + "BranchName": { + "description": "The name of the checked out Git branch.", + "type": "string" + }, + "BuildMetaData": { + "description": "The build metadata, usually representing number of commits since the VersionSourceSha.", + "type": [ + "integer", + "null" + ] + }, + "CommitDate": { + "description": "The ISO-8601 formatted date of the commit identified by Sha.", + "type": "string" + }, + "CommitsSinceVersionSource": { + "description": "The number of commits since the version source.", + "type": [ + "integer", + "null" + ] + }, + "EscapedBranchName": { + "description": "Equal to BranchName, but with / replaced with -.", + "type": "string" + }, + "FullBuildMetaData": { + "description": "The BuildMetaData suffixed with BranchName and Sha.", + "type": "string" + }, + "FullSemVer": { + "description": "The full, SemVer 2.0 compliant version number.", + "type": "string" + }, + "InformationalVersion": { + "description": "Suitable for .NET AssemblyInformationalVersion. Defaults to FullSemVer suffixed by FullBuildMetaData.", + "type": "string" + }, + "Major": { + "description": "The major version. Should be incremented on breaking changes.", + "type": [ + "integer", + "null" + ] + }, + "MajorMinorPatch": { + "description": "Major, Minor and Patch joined together, separated by '.'.", + "type": "string" + }, + "Minor": { + "description": "The minor version. Should be incremented on new features.", + "type": [ + "integer", + "null" + ] + }, + "Patch": { + "description": "The patch version. Should be incremented on bug fixes.", + "type": [ + "integer", + "null" + ] + }, + "PreReleaseLabel": { + "description": "The pre-release label is the name of the pre-release.", + "type": "string" + }, + "PreReleaseLabelWithDash": { + "description": "The pre-release label prefixed with a dash.", + "type": "string" + }, + "PreReleaseNumber": { + "description": "The pre-release number is the number of commits since the last version bump.", + "type": [ + "integer", + "null" + ] + }, + "PreReleaseTag": { + "description": "The pre-release tag is the pre-release label suffixed by the PreReleaseNumber.", + "type": "string" + }, + "PreReleaseTagWithDash": { + "description": "The pre-release tag prefixed with a dash.", + "type": "string" + }, + "SemVer": { + "description": "The semantic version number, including PreReleaseTagWithDash for pre-release version numbers.", + "type": "string" + }, + "Sha": { + "description": "The SHA of the Git commit.", + "type": "string" + }, + "ShortSha": { + "description": "The Sha limited to 7 characters.", + "type": "string" + }, + "UncommittedChanges": { + "description": "The number of uncommitted changes present in the repository.", + "type": [ + "integer", + "null" + ] + }, + "VersionSourceSha": { + "description": "The SHA of the commit used as version source.", + "type": "string" + }, + "WeightedPreReleaseNumber": { + "description": "A summation of branch specific pre-release-weight and the PreReleaseNumber. Can be used to obtain a monotonically increasing version number across the branches.", + "type": [ + "integer", + "null" + ] + } + } +} \ No newline at end of file diff --git a/src/.run/cli.run.xml b/src/.run/cli.run.xml new file mode 100644 index 0000000000..b745ee05ee --- /dev/null +++ b/src/.run/cli.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/src/.run/schema.run.xml b/src/.run/schema.run.xml new file mode 100644 index 0000000000..e57b890d7b --- /dev/null +++ b/src/.run/schema.run.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 229c697956..ef2ef736ca 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,5 +1,7 @@ + net6.0;net7.0;net8.0 + $([System.DateTime]::Today.Year) GitTools and Contributors Copyright GitTools $(EndYear). @@ -16,69 +18,83 @@ https://github.com/GitTools/GitVersion git - 1591,8618 + $(NoWarn);NU1701;1591,8618,SYSLIB10;EnableGenerateDocumentationFile + $(WarningsAsErrors);RS0016;RS0017;RS0022;RS0024;RS0025;RS0026;RS0027 + embedded - 10 + 12 enable enable + en - True - + true latest - True + true + false + false + true - - 0.27.0-preview-0182 - 2.0.315-alpha.0.9 - - 2022.1.0 - 11.2.1 - 6.0.0 - 6.0.0 - 6.0.0 - 17.2.0 - - 17.2.0 - 4.3.0 - 3.1.2 - 3.13.3 - 4.2.1 - 3.0.114 - 4.0.3 - 3.3.3 + + + true - - - - - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + - - + - - - - + + + + - + all runtime; build; native; contentfiles; analyzers + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + - + + + + + + + - - - - - - + + + + + + + + + @@ -86,10 +102,6 @@ - - - - true diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props new file mode 100644 index 0000000000..7d0d83aa4b --- /dev/null +++ b/src/Directory.Packages.props @@ -0,0 +1,41 @@ + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Docker/README.md b/src/Docker/README.md deleted file mode 100644 index c89ad73690..0000000000 --- a/src/Docker/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# There are 4 variants of docker image - -* based on **microsoft/dotnet-framework:4.8-runtime** - Windows Full FX -* based on **microsoft/dotnet:2.1-runtime** - Windows dotnet core -* based on **mono:5.18** - Linux Full FX - on mono -* based on **microsoft/dotnet:2.1-runtime** - Linux dotnet core -* based on **centos:7** - linux dotnet core - -To run on windows container run this -`docker run --rm -v "$(pwd):c:/repo" gittools/gitversion:latest-windows-net48 c:/repo` - -`docker run --rm -v "$(pwd):c:/repo" gittools/gitversion:latest-windows-netcoreapp2.1 c:/repo` - -To run on linux container run this -`docker run --rm -v "$(pwd):/repo" gittools/gitversion:latest-linux-net48 /repo` - -`docker run --rm -v "$(pwd):/repo" gittools/gitversion:latest-linux-netcoreapp2.1 /repo` diff --git a/src/Docker/prerequisites.md b/src/Docker/prerequisites.md deleted file mode 100644 index 5d773a44ea..0000000000 --- a/src/Docker/prerequisites.md +++ /dev/null @@ -1,20 +0,0 @@ -# Run with qemu - -## set buildx as the default docker builder - -```bash -docker buildx install -``` - -## create and use a docker buildx context - -```bash -docker buildx create --name gitversion --use -docker context use gitversion -``` - -## install qemu static - -```bash -docker run --rm --privileged multiarch/qemu-user-static --reset -p yes -``` diff --git a/src/GitTools.Testing/Fixtures/BaseGitFlowRepositoryFixture.cs b/src/GitTools.Testing/Fixtures/BaseGitFlowRepositoryFixture.cs deleted file mode 100644 index bc41fad9a3..0000000000 --- a/src/GitTools.Testing/Fixtures/BaseGitFlowRepositoryFixture.cs +++ /dev/null @@ -1,57 +0,0 @@ -using LibGit2Sharp; - -namespace GitTools.Testing; - -/// -/// Creates a repo with a develop branch off main which is a single commit ahead of main -/// -public class BaseGitFlowRepositoryFixture : EmptyRepositoryFixture -{ - /// - /// Creates a repo with a develop branch off main which is a single commit ahead of main - /// - /// Main will be tagged with the initial version before branching develop - /// - public BaseGitFlowRepositoryFixture(string initialVersion) : this(initialVersion, "main") - { - } - - /// - /// Creates a repo with a develop branch off main which is a single commit ahead of main - /// - /// Main will be tagged with the initial version before branching develop - /// - public BaseGitFlowRepositoryFixture(string initialVersion, string branchName) : - this(r => r.MakeATaggedCommit(initialVersion), branchName) - { - } - - /// - /// Creates a repo with a develop branch off main which is a single commit ahead of main - /// - /// The initial setup actions will be performed before branching develop - /// - public BaseGitFlowRepositoryFixture(Action initialMainAction) : this(initialMainAction, "main") - { - } - - /// - /// Creates a repo with a develop branch off main which is a single commit ahead of main - /// - /// The initial setup actions will be performed before branching develop - /// - public BaseGitFlowRepositoryFixture(Action initialMainAction, string branchName) : - base(branchName) => SetupRepo(initialMainAction); - - private void SetupRepo(Action initialMainAction) - { - var randomFile = Path.Combine(Repository.Info.WorkingDirectory, Guid.NewGuid().ToString()); - File.WriteAllText(randomFile, string.Empty); - Commands.Stage(Repository, randomFile); - - initialMainAction(Repository); - - Commands.Checkout(Repository, Repository.CreateBranch("develop")); - Repository.MakeACommit(); - } -} diff --git a/src/GitTools.Testing/Fixtures/EmptyRepositoryFixture.cs b/src/GitTools.Testing/Fixtures/EmptyRepositoryFixture.cs deleted file mode 100644 index 710ad33c08..0000000000 --- a/src/GitTools.Testing/Fixtures/EmptyRepositoryFixture.cs +++ /dev/null @@ -1,23 +0,0 @@ -using LibGit2Sharp; - -namespace GitTools.Testing; - -public class EmptyRepositoryFixture : RepositoryFixtureBase -{ - public EmptyRepositoryFixture() : this("main") - { - } - - public EmptyRepositoryFixture(string branchName) - : base(path => CreateNewRepository(path, branchName)) - { - } - - private static IRepository CreateNewRepository(string path, string branchName) - { - Init(path, branchName); - Console.WriteLine("Created git repository at '{0}'", path); - - return new Repository(path); - } -} diff --git a/src/GitTools.Testing/Fixtures/LocalRepositoryFixture.cs b/src/GitTools.Testing/Fixtures/LocalRepositoryFixture.cs deleted file mode 100644 index 3ce412eb80..0000000000 --- a/src/GitTools.Testing/Fixtures/LocalRepositoryFixture.cs +++ /dev/null @@ -1,10 +0,0 @@ -using LibGit2Sharp; - -namespace GitTools.Testing; - -public class LocalRepositoryFixture : RepositoryFixtureBase -{ - public LocalRepositoryFixture(IRepository repository) : base(repository) - { - } -} diff --git a/src/GitTools.Testing/Fixtures/RepositoryFixtureBase.cs b/src/GitTools.Testing/Fixtures/RepositoryFixtureBase.cs deleted file mode 100644 index 9ab330f4df..0000000000 --- a/src/GitTools.Testing/Fixtures/RepositoryFixtureBase.cs +++ /dev/null @@ -1,121 +0,0 @@ -using GitTools.Testing.Internal; -using LibGit2Sharp; - -namespace GitTools.Testing; - -/// -/// Fixture abstracting a git repository -/// -public abstract class RepositoryFixtureBase : IDisposable -{ - - protected RepositoryFixtureBase(Func repoBuilder) - : this(repoBuilder(PathHelper.GetTempPath())) - { - } - - protected RepositoryFixtureBase(IRepository repository) - { - this.SequenceDiagram = new SequenceDiagram(); - Repository = repository; - Repository.Config.Set("user.name", "Test"); - Repository.Config.Set("user.email", "test@email.com"); - } - - public IRepository Repository { get; } - - public string RepositoryPath => Repository.Info.WorkingDirectory.TrimEnd('\\'); - - public SequenceDiagram SequenceDiagram { get; } - - - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - protected virtual void Dispose(bool disposing) - { - if (!disposing) - { - return; - } - - Repository.Dispose(); - - try - { - DirectoryHelper.DeleteDirectory(RepositoryPath); - } - catch (Exception e) - { - Console.WriteLine("Failed to clean up repository path at {0}. Received exception: {1}", RepositoryPath, - e.Message); - } - - this.SequenceDiagram.End(); - Console.WriteLine("**Visualisation of test:**"); - Console.WriteLine(string.Empty); - Console.WriteLine(this.SequenceDiagram.GetDiagram()); - } - - public void Checkout(string branch) => Commands.Checkout(Repository, branch); - - public static void Init(string path, string branchName) => GitTestExtensions.ExecuteGitCmd($"init {path} -b {branchName}"); - - public void MakeATaggedCommit(string tag) - { - MakeACommit(); - ApplyTag(tag); - } - - public void ApplyTag(string tag) - { - this.SequenceDiagram.ApplyTag(tag, Repository.Head.FriendlyName); - Repository.ApplyTag(tag); - } - - public void BranchTo(string branchName, string? @as = null) - { - this.SequenceDiagram.BranchTo(branchName, Repository.Head.FriendlyName, @as); - var branch = Repository.CreateBranch(branchName); - Commands.Checkout(Repository, branch); - } - - public void BranchToFromTag(string branchName, string fromTag, string onBranch, string? @as = null) - { - this.SequenceDiagram.BranchToFromTag(branchName, fromTag, onBranch, @as); - var branch = Repository.CreateBranch(branchName); - Commands.Checkout(Repository, branch); - } - - public void MakeACommit() - { - var to = Repository.Head.FriendlyName; - this.SequenceDiagram.MakeACommit(to); - Repository.MakeACommit(); - } - - /// - /// Merges (no-ff) specified branch into the current HEAD of this repository - /// - public void MergeNoFF(string mergeSource) - { - this.SequenceDiagram.Merge(mergeSource, Repository.Head.FriendlyName); - Repository.MergeNoFF(mergeSource, Generate.SignatureNow()); - } - - /// - /// Clones the repository managed by this fixture into another LocalRepositoryFixture - /// - public LocalRepositoryFixture CloneRepository() - { - var localPath = PathHelper.GetTempPath(); - LibGit2Sharp.Repository.Clone(RepositoryPath, localPath); - return new LocalRepositoryFixture(new Repository(localPath)); - } -} diff --git a/src/GitTools.Testing/GitTools.Testing.csproj b/src/GitTools.Testing/GitTools.Testing.csproj deleted file mode 100644 index 5c885c3877..0000000000 --- a/src/GitTools.Testing/GitTools.Testing.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - netstandard2.0 - false - - - - - - diff --git a/src/GitTools.Testing/Internal/PathHelper.cs b/src/GitTools.Testing/Internal/PathHelper.cs deleted file mode 100644 index 8b71cdf091..0000000000 --- a/src/GitTools.Testing/Internal/PathHelper.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace GitTools.Testing.Internal; - -internal static class PathHelper -{ - public static string GetTempPath() => Path.Combine(Path.GetTempPath(), "TestRepositories", Guid.NewGuid().ToString()); -} diff --git a/src/GitTools.Testing/Internal/ProcessHelper.cs b/src/GitTools.Testing/Internal/ProcessHelper.cs deleted file mode 100644 index 66eb4c8750..0000000000 --- a/src/GitTools.Testing/Internal/ProcessHelper.cs +++ /dev/null @@ -1,210 +0,0 @@ -using System.ComponentModel; -using System.Runtime.InteropServices; - -namespace GitTools.Testing.Internal; - -public static class ProcessHelper -{ - private static readonly object LockObject = new(); - - // http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/f6069441-4ab1-4299-ad6a-b8bb9ed36be3 - private static Process? Start(ProcessStartInfo startInfo) - { - Process? process; - - lock (LockObject) - { - using (new ChangeErrorMode(ErrorModes.FailCriticalErrors | ErrorModes.NoGpFaultErrorBox)) - { - try - { - process = Process.Start(startInfo); - } - catch (Win32Exception exception) - { - switch ((NativeErrorCode)exception.NativeErrorCode) - { - case NativeErrorCode.Success: - // Success is not a failure. - break; - - case NativeErrorCode.FileNotFound: - throw new FileNotFoundException($"The executable file '{startInfo.FileName}' could not be found.", - startInfo.FileName, - exception); - - case NativeErrorCode.PathNotFound: - throw new DirectoryNotFoundException($"The path to the executable file '{startInfo.FileName}' could not be found.", - exception); - } - - throw; - } - - try - { - if (process != null) - { - process.PriorityClass = ProcessPriorityClass.Idle; - } - } - catch - { - // NOTE: It seems like in some situations, setting the priority class will throw a Win32Exception - // with the error code set to "Success", which I think we can safely interpret as a success and - // not an exception. - // - // See: https://travis-ci.org/GitTools/GitVersion/jobs/171288284#L2026 - // And: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx - // - // There's also the case where the process might be killed before we try to adjust its priority - // class, in which case it will throw an InvalidOperationException. What we ideally should do - // is start the process in a "suspended" state, adjust the priority class, then resume it, but - // that's not possible in pure .NET. - // - // See: https://travis-ci.org/GitTools/GitVersion/jobs/166709203#L2278 - // And: http://www.codeproject.com/Articles/230005/Launch-a-process-suspended - // - // -- @asbjornu - } - } - } - - return process; - } - - // http://csharptest.net/532/using-processstart-to-capture-console-output/ - public static int Run(Action output, Action errorOutput, TextReader? input, string exe, string args, string workingDirectory, params KeyValuePair[] environmentalVariables) - { - if (string.IsNullOrEmpty(exe)) - throw new ArgumentNullException(nameof(exe)); - if (output == null) - throw new ArgumentNullException(nameof(output)); - - var psi = new ProcessStartInfo - { - UseShellExecute = false, - RedirectStandardError = true, - RedirectStandardOutput = true, - RedirectStandardInput = true, - WindowStyle = ProcessWindowStyle.Hidden, - CreateNoWindow = true, - ErrorDialog = false, - WorkingDirectory = workingDirectory, - FileName = exe, - Arguments = args - }; - foreach (var (key, value) in environmentalVariables) - { - var psiEnvironmentVariables = psi.EnvironmentVariables; - if (psiEnvironmentVariables.ContainsKey(key) && string.IsNullOrEmpty(value)) - { - psiEnvironmentVariables.Remove(key); - } - else if (psiEnvironmentVariables.ContainsKey(key)) - { - psiEnvironmentVariables[key] = value; - } - else - { - psiEnvironmentVariables.Add(key, value); - } - } - - using var process = Start(psi); - - if (process is null) - { - // FIX ME: What error code do you want to return? - return -1; - } - - using var mreOut = new ManualResetEvent(false); - using var mreErr = new ManualResetEvent(false); - process.EnableRaisingEvents = true; - process.OutputDataReceived += (_, e) => - { - // ReSharper disable once AccessToDisposedClosure - if (e.Data == null) - mreOut.Set(); - else - output(e.Data); - }; - process.BeginOutputReadLine(); - process.ErrorDataReceived += (_, e) => - { - // ReSharper disable once AccessToDisposedClosure - if (e.Data == null) - mreErr.Set(); - else - errorOutput(e.Data); - }; - process.BeginErrorReadLine(); - - string? line; - while ((line = input?.ReadLine()) != null) - process.StandardInput.WriteLine(line); - - process.StandardInput.Close(); - process.WaitForExit(); - - mreOut.WaitOne(); - mreErr.WaitOne(); - - return process.ExitCode; - } - - /// - /// System error codes. - /// See: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382.aspx - /// - private enum NativeErrorCode - { - Success = 0x0, - FileNotFound = 0x2, - PathNotFound = 0x3 - } - - [Flags] - private enum ErrorModes - { - Default = 0x0, - FailCriticalErrors = 0x1, - NoGpFaultErrorBox = 0x2, - NoAlignmentFaultExcept = 0x4, - NoOpenFileErrorBox = 0x8000 - } - - private readonly struct ChangeErrorMode : IDisposable - { - private readonly int oldMode; - - public ChangeErrorMode(ErrorModes mode) - { - try - { - this.oldMode = SetErrorMode((int)mode); - } - catch (Exception ex) when (ex is EntryPointNotFoundException or DllNotFoundException) - { - this.oldMode = (int)mode; - } - } - - - void IDisposable.Dispose() - { - try - { - SetErrorMode(this.oldMode); - } - catch (Exception ex) when (ex is EntryPointNotFoundException or DllNotFoundException) - { - // NOTE: Mono doesn't support DllImport("kernel32.dll") and its SetErrorMode method, obviously. @asbjornu - } - } - - [DllImport("kernel32.dll")] - private static extern int SetErrorMode(int newMode); - } -} diff --git a/src/GitTools.Testing/Internal/StringBuilderExtensions.cs b/src/GitTools.Testing/Internal/StringBuilderExtensions.cs deleted file mode 100644 index 0e76c7917d..0000000000 --- a/src/GitTools.Testing/Internal/StringBuilderExtensions.cs +++ /dev/null @@ -1,13 +0,0 @@ -using JetBrains.Annotations; - -namespace GitTools.Testing.Internal; - -internal static class StringBuilderExtensions -{ - [StringFormatMethod("format")] - public static void AppendLineFormat(this StringBuilder stringBuilder, string format, params object?[] args) - { - stringBuilder.AppendFormat(format, args); - stringBuilder.AppendLine(); - } -} diff --git a/src/GitVersion.App.Tests/ArgumentParserOnBuildServerTests.cs b/src/GitVersion.App.Tests/ArgumentParserOnBuildServerTests.cs index a1e5e85ec4..8be300083d 100644 --- a/src/GitVersion.App.Tests/ArgumentParserOnBuildServerTests.cs +++ b/src/GitVersion.App.Tests/ArgumentParserOnBuildServerTests.cs @@ -1,9 +1,7 @@ -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests.Helpers; using GitVersion.OutputVariables; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -33,9 +31,10 @@ public void EmptyOnFetchDisabledBuildServerMeansNoFetchIsTrue() private class MockBuildAgent : ICurrentBuildAgent { + public bool IsDefault => false; public bool CanApplyToCurrentContext() => throw new NotImplementedException(); - public void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) => throw new NotImplementedException(); + public void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) => throw new NotImplementedException(); public string GetCurrentBranch(bool usingDynamicRepos) => throw new NotImplementedException(); diff --git a/src/GitVersion.App.Tests/ArgumentParserTests.cs b/src/GitVersion.App.Tests/ArgumentParserTests.cs index 5573c8609b..d8456c7d12 100644 --- a/src/GitVersion.App.Tests/ArgumentParserTests.cs +++ b/src/GitVersion.App.Tests/ArgumentParserTests.cs @@ -1,14 +1,9 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -34,7 +29,7 @@ public void SetUp() public void EmptyMeansUseCurrentDirectory() { var arguments = this.argumentParser.ParseArguments(""); - arguments.TargetPath.ShouldBe(System.Environment.CurrentDirectory); + arguments.TargetPath.ShouldBe(SysEnv.CurrentDirectory); arguments.LogFilePath.ShouldBe(null); arguments.IsHelp.ShouldBe(false); } @@ -52,7 +47,7 @@ public void SingleMeansUseAsTargetDirectory() public void NoPathAndLogfileShouldUseCurrentDirectoryTargetDirectory() { var arguments = this.argumentParser.ParseArguments("-l logFilePath"); - arguments.TargetPath.ShouldBe(System.Environment.CurrentDirectory); + arguments.TargetPath.ShouldBe(SysEnv.CurrentDirectory); arguments.LogFilePath.ShouldBe("logFilePath"); arguments.IsHelp.ShouldBe(false); } @@ -61,8 +56,11 @@ public void NoPathAndLogfileShouldUseCurrentDirectoryTargetDirectory() public void HelpSwitchTest() { var arguments = this.argumentParser.ParseArguments("-h"); - Assert.IsNull(arguments.TargetPath); - Assert.IsNull(arguments.LogFilePath); + Assert.Multiple(() => + { + Assert.That(arguments.TargetPath, Is.Null); + Assert.That(arguments.LogFilePath, Is.Null); + }); arguments.IsHelp.ShouldBe(true); } @@ -70,8 +68,11 @@ public void HelpSwitchTest() public void VersionSwitchTest() { var arguments = this.argumentParser.ParseArguments("-version"); - Assert.IsNull(arguments.TargetPath); - Assert.IsNull(arguments.LogFilePath); + Assert.Multiple(() => + { + Assert.That(arguments.TargetPath, Is.Null); + Assert.That(arguments.LogFilePath, Is.Null); + }); arguments.IsVersion.ShouldBe(true); } @@ -369,7 +370,7 @@ public void UpdateAssemblyInfoWithRelativeFilename() public void OverrideconfigWithNoOptions() { var arguments = this.argumentParser.ParseArguments("/overrideconfig"); - arguments.OverrideConfig.ShouldBeNull(); + arguments.OverrideConfiguration.ShouldBeNull(); } [TestCaseSource(nameof(OverrideconfigWithInvalidOptionTestData))] @@ -390,195 +391,160 @@ private static IEnumerable OverrideconfigWithInvalidOptionTestData { ExpectedResult = "Could not parse /overrideconfig option: unknown-option=25. Unsupported 'key'." }; - yield return new TestCaseData("update-build-number=1") - { - ExpectedResult = "Could not parse /overrideconfig option: update-build-number=1. Ensure that 'value' is 'true' or 'false'." - }; - yield return new TestCaseData("tag-pre-release-weight=invalid-value") - { - ExpectedResult = "Could not parse /overrideconfig option: tag-pre-release-weight=invalid-value. Ensure that 'value' is valid integer number." - }; - yield return new TestCaseData("assembly-versioning-scheme=WrongEnumValue") - { - ExpectedResult = $"Could not parse /overrideconfig option: assembly-versioning-scheme=WrongEnumValue. Ensure that 'value' is valid for specified 'key' enumeration: {System.Environment.NewLine}" + - $"MajorMinorPatchTag{System.Environment.NewLine}" + - $"MajorMinorPatch{System.Environment.NewLine}" + - $"MajorMinor{System.Environment.NewLine}" + - $"Major{System.Environment.NewLine}" + - $"None{System.Environment.NewLine}" - }; } - [TestCaseSource(nameof(OverrideconfigWithSingleOptionTestData))] - public void OverrideconfigWithSingleOptions(string options, Config expected) + [TestCaseSource(nameof(OverrideConfigWithSingleOptionTestData))] + public void OverrideConfigWithSingleOptions(string options, IGitVersionConfiguration expected) { var arguments = this.argumentParser.ParseArguments($"/overrideconfig {options}"); - arguments.OverrideConfig.ShouldBeEquivalentTo(expected); + + ConfigurationHelper configurationHelper = new(arguments.OverrideConfiguration); + configurationHelper.Configuration.ShouldBeEquivalentTo(expected); } - private static IEnumerable OverrideconfigWithSingleOptionTestData() + private static IEnumerable OverrideConfigWithSingleOptionTestData() { yield return new TestCaseData( "assembly-versioning-scheme=MajorMinor", - new Config + new GitVersionConfiguration { AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinor } ); yield return new TestCaseData( "assembly-file-versioning-scheme=\"MajorMinorPatch\"", - new Config + new GitVersionConfiguration { AssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch } ); yield return new TestCaseData( "assembly-informational-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\"", - new Config + new GitVersionConfiguration { AssemblyInformationalFormat = "{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}" } ); yield return new TestCaseData( "assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\"", - new Config + new GitVersionConfiguration { AssemblyVersioningFormat = "{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}" } ); yield return new TestCaseData( "assembly-file-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\"", - new Config + new GitVersionConfiguration { AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}" } ); yield return new TestCaseData( "mode=ContinuousDelivery", - new Config + new GitVersionConfiguration { - VersioningMode = VersioningMode.ContinuousDelivery + DeploymentMode = DeploymentMode.ContinuousDelivery } ); yield return new TestCaseData( "tag-prefix=sample", - new Config + new GitVersionConfiguration { TagPrefix = "sample" } ); yield return new TestCaseData( - "continuous-delivery-fallback-tag=cd-tag", - new Config + "label=cd-label", + new GitVersionConfiguration { - ContinuousDeploymentFallbackTag = "cd-tag" + Label = "cd-label" } ); yield return new TestCaseData( "next-version=1", - new Config + new GitVersionConfiguration { NextVersion = "1" } ); yield return new TestCaseData( "major-version-bump-message=\"This is major version bump message.\"", - new Config + new GitVersionConfiguration { MajorVersionBumpMessage = "This is major version bump message." } ); yield return new TestCaseData( "minor-version-bump-message=\"This is minor version bump message.\"", - new Config + new GitVersionConfiguration { MinorVersionBumpMessage = "This is minor version bump message." } ); yield return new TestCaseData( "patch-version-bump-message=\"This is patch version bump message.\"", - new Config + new GitVersionConfiguration { PatchVersionBumpMessage = "This is patch version bump message." } ); yield return new TestCaseData( "no-bump-message=\"This is no bump message.\"", - new Config + new GitVersionConfiguration { NoBumpMessage = "This is no bump message." } ); - yield return new TestCaseData( - "legacy-semver-padding=99", - new Config - { - LegacySemVerPadding = 99 - } - ); - yield return new TestCaseData( - "build-metadata-padding=30", - new Config - { - BuildMetaDataPadding = 30 - } - ); - yield return new TestCaseData( - "commits-since-version-source-padding=5", - new Config - { - CommitsSinceVersionSourcePadding = 5 - } - ); yield return new TestCaseData( "tag-pre-release-weight=2", - new Config + new GitVersionConfiguration { TagPreReleaseWeight = 2 } ); yield return new TestCaseData( "commit-message-incrementing=MergeMessageOnly", - new Config + new GitVersionConfiguration { CommitMessageIncrementing = CommitMessageIncrementMode.MergeMessageOnly } ); yield return new TestCaseData( "increment=Minor", - new Config + new GitVersionConfiguration { Increment = IncrementStrategy.Minor } ); yield return new TestCaseData( "commit-date-format=\"MM/dd/yyyy h:mm tt\"", - new Config + new GitVersionConfiguration { CommitDateFormat = "MM/dd/yyyy h:mm tt" } ); yield return new TestCaseData( "update-build-number=true", - new Config + new GitVersionConfiguration { UpdateBuildNumber = true } ); } - [TestCaseSource(nameof(OverrideconfigWithMultipleOptionsTestData))] - public void OverrideconfigWithMultipleOptions(string options, Config expected) + [TestCaseSource(nameof(OverrideConfigWithMultipleOptionsTestData))] + public void OverrideConfigWithMultipleOptions(string options, IGitVersionConfiguration expected) { var arguments = this.argumentParser.ParseArguments(options); - arguments.OverrideConfig.ShouldBeEquivalentTo(expected); + ConfigurationHelper configurationHelper = new(arguments.OverrideConfiguration); + configurationHelper.Configuration.ShouldBeEquivalentTo(expected); } - private static IEnumerable OverrideconfigWithMultipleOptionsTestData() + private static IEnumerable OverrideConfigWithMultipleOptionsTestData() { yield return new TestCaseData( "/overrideconfig tag-prefix=sample /overrideconfig assembly-versioning-scheme=MajorMinor", - new Config + new GitVersionConfiguration { TagPrefix = "sample", AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinor @@ -586,7 +552,7 @@ private static IEnumerable OverrideconfigWithMultipleOptionsTestDa ); yield return new TestCaseData( "/overrideconfig tag-prefix=sample /overrideconfig assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\"", - new Config + new GitVersionConfiguration { TagPrefix = "sample", AssemblyVersioningFormat = "{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}" @@ -594,13 +560,13 @@ private static IEnumerable OverrideconfigWithMultipleOptionsTestDa ); yield return new TestCaseData( "/overrideconfig tag-prefix=sample /overrideconfig assembly-versioning-format=\"{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}\" /overrideconfig update-build-number=true /overrideconfig assembly-versioning-scheme=MajorMinorPatchTag /overrideconfig mode=ContinuousDelivery /overrideconfig tag-pre-release-weight=4", - new Config + new GitVersionConfiguration { TagPrefix = "sample", AssemblyVersioningFormat = "{Major}.{Minor}.{Patch}.{env:CI_JOB_ID ?? 0}", UpdateBuildNumber = true, AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, - VersioningMode = VersioningMode.ContinuousDelivery, + DeploymentMode = DeploymentMode.ContinuousDelivery, TagPreReleaseWeight = 4 } ); @@ -630,8 +596,8 @@ public void EnsureAssemblyInfoFalse() [Test] public void DynamicRepoLocation() { - var arguments = this.argumentParser.ParseArguments("-dynamicRepoLocation c:\\foo\\"); - arguments.ClonePath.ShouldBe("c:\\foo\\"); + var arguments = this.argumentParser.ParseArguments(@"-dynamicRepoLocation /tmp/foo"); + arguments.ClonePath.ShouldBe("/tmp/foo"); } [Test] @@ -765,4 +731,33 @@ public void ArbitraryArgumentsRemotePasswordDefinedSetsPassword() var arguments = this.argumentParser.ParseArguments("-nocache"); arguments.Authentication.Password.ShouldBe("value"); } + + [Test] + public void EnsureShowVariableIsSet() + { + var arguments = this.argumentParser.ParseArguments("-showvariable SemVer"); + arguments.ShowVariable.ShouldBe("SemVer"); + } + + [Test] + public void EnsureFormatIsSet() + { + var arguments = this.argumentParser.ParseArguments("-format {Major}.{Minor}.{Patch}"); + arguments.Format.ShouldBe("{Major}.{Minor}.{Patch}"); + } + + [TestCase("custom-config.yaml")] + [TestCase("/tmp/custom-config.yaml")] + public void ThrowIfConfigurationFileDoesNotExist(string configFile) => + Should.Throw(() => _ = this.argumentParser.ParseArguments($"-config {configFile}")); + + [Test] + public void EnsureConfigurationFileIsSet() + { + var configFile = PathHelper.GetTempPath() + Guid.NewGuid() + ".yaml"; + File.WriteAllText(configFile, "next-version: 1.0.0"); + var arguments = this.argumentParser.ParseArguments($"-config {configFile}"); + arguments.ConfigurationFile.ShouldBe(configFile); + File.Delete(configFile); + } } diff --git a/src/GitVersion.App.Tests/ExecCmdLineArgumentTest.cs b/src/GitVersion.App.Tests/ExecCmdLineArgumentTest.cs index e5cc3906ef..8496a4549c 100644 --- a/src/GitVersion.App.Tests/ExecCmdLineArgumentTest.cs +++ b/src/GitVersion.App.Tests/ExecCmdLineArgumentTest.cs @@ -1,8 +1,5 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -17,6 +14,7 @@ public void InvalidArgumentsExitCodeShouldNotBeZero() var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /invalid-argument"); result.ExitCode.ShouldNotBe(0); + result.Output.ShouldNotBeNull(); result.Output.ShouldContain("Could not parse command line parameter '/invalid-argument'"); } @@ -30,6 +28,7 @@ public void LogPathContainsForwardSlash() var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, @" /l ""/tmp/path""", false); result.ExitCode.ShouldBe(0); + result.Output.ShouldNotBeNull(); result.Output.ShouldContain(@"""MajorMinorPatch"": ""1.2.4"""); } @@ -46,15 +45,17 @@ public void CheckBuildServerVerbosityConsole(string verbosityArg, string expecte var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, $@" {verbosityArg} -output buildserver /l ""/tmp/path""", false); result.ExitCode.ShouldBe(0); + result.Output.ShouldNotBeNull(); result.Output.ShouldContain(expectedOutput); } [Test] public void WorkingDirectoryWithoutGitFolderFailsWithInformativeMessage() { - var result = GitVersionHelper.ExecuteIn(System.Environment.SystemDirectory, null, false); + var result = GitVersionHelper.ExecuteIn(SysEnv.SystemDirectory, null, false); result.ExitCode.ShouldNotBe(0); + result.Output.ShouldNotBeNull(); result.Output.ShouldContain("Cannot find the .git directory"); } @@ -66,14 +67,15 @@ public void WorkingDirectoryWithoutCommitsFailsWithInformativeMessage() var result = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, null, false); result.ExitCode.ShouldNotBe(0); + result.Output.ShouldNotBeNull(); result.Output.ShouldContain("No commits found on the current branch."); } [Test] public void WorkingDirectoryDoesNotExistFailsWithInformativeMessage() { - var workingDirectory = PathHelper.Combine(ExecutableHelper.GetCurrentDirectory(), Guid.NewGuid().ToString("N")); - var executable = ExecutableHelper.GetExecutable(); + var workingDirectory = PathHelper.Combine(PathHelper.GetCurrentDirectory(), Guid.NewGuid().ToString("N")); + var executable = ExecutableHelper.GetDotNetExecutable(); var output = new StringBuilder(); var args = ExecutableHelper.GetExecutableArgs($" /targetpath {workingDirectory} "); @@ -84,7 +86,7 @@ public void WorkingDirectoryDoesNotExistFailsWithInformativeMessage() null, executable, args, - ExecutableHelper.GetCurrentDirectory()); + PathHelper.GetCurrentDirectory()); exitCode.ShouldNotBe(0); var outputString = output.ToString(); diff --git a/src/GitVersion.App.Tests/GitVersion.App.Tests.csproj b/src/GitVersion.App.Tests/GitVersion.App.Tests.csproj index d178a4dc93..0d2f6f3e71 100644 --- a/src/GitVersion.App.Tests/GitVersion.App.Tests.csproj +++ b/src/GitVersion.App.Tests/GitVersion.App.Tests.csproj @@ -1,14 +1,10 @@ - - net48;netcoreapp3.1;net5.0;net6.0 - - true - - + + @@ -21,14 +17,14 @@ - - + + diff --git a/src/GitVersion.App.Tests/HelpWriterTests.cs b/src/GitVersion.App.Tests/HelpWriterTests.cs index e43330ba5b..e653ed21ed 100644 --- a/src/GitVersion.App.Tests/HelpWriterTests.cs +++ b/src/GitVersion.App.Tests/HelpWriterTests.cs @@ -1,8 +1,6 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -22,7 +20,6 @@ public void AllArgsAreInHelp() var lookup = new Dictionary { { nameof(Arguments.TargetUrl), "/url" }, - { nameof(Arguments.Init), "init" }, { nameof(Arguments.TargetBranch), "/b" }, { nameof(Arguments.LogFilePath) , "/l" }, { nameof(Arguments.OutputFile) , "/outputfile" }, @@ -30,9 +27,13 @@ public void AllArgsAreInHelp() { nameof(Arguments.IsHelp), "/?" }, { nameof(Arguments.IsVersion), "/version" }, { nameof(Arguments.UpdateWixVersionFile), "/updatewixversionfile" }, - { nameof(Arguments.ConfigFile), "/config" }, + { nameof(Arguments.ConfigurationFile), "/config" }, { nameof(Arguments.Verbosity), "/verbosity" }, - { nameof(Arguments.CommitId), "/c" } + { nameof(Arguments.CommitId), "/c" }, + { nameof(Arguments.ShowConfiguration), "/showconfig" }, + { nameof(Arguments.OverrideConfiguration), "/overrideconfig" }, + { nameof(Arguments.ShowVariable), "/showvariable" }, + { nameof(Arguments.Format), "/format" } }; string helpText = string.Empty; @@ -40,7 +41,8 @@ public void AllArgsAreInHelp() var ignored = new[] { - nameof(Arguments.Authentication) + nameof(Arguments.Authentication), + nameof(Arguments.UpdateAssemblyInfoFileName) }; typeof(Arguments).GetFields() .Select(p => p.Name) diff --git a/src/GitVersion.App.Tests/Helpers/ArgumentBuilder.cs b/src/GitVersion.App.Tests/Helpers/ArgumentBuilder.cs index 26ea3b65c4..9bdcfd47f8 100644 --- a/src/GitVersion.App.Tests/Helpers/ArgumentBuilder.cs +++ b/src/GitVersion.App.Tests/Helpers/ArgumentBuilder.cs @@ -31,31 +31,31 @@ public override string ToString() { var arguments = new StringBuilder(); - arguments.Append($" /targetpath \"{this.WorkingDirectory}\""); + arguments.Append(" /targetpath \"").Append(this.WorkingDirectory).Append('\"'); if (!this.exec.IsNullOrWhiteSpace()) { - arguments.Append($" /exec \"{this.exec}\""); + arguments.Append(" /exec \"").Append(this.exec).Append('\"'); } if (!this.execArgs.IsNullOrWhiteSpace()) { - arguments.Append($" /execArgs \"{this.execArgs}\""); + arguments.Append(" /execArgs \"").Append(this.execArgs).Append('\"'); } if (!this.projectFile.IsNullOrWhiteSpace()) { - arguments.Append($" /proj \"{this.projectFile}\""); + arguments.Append(" /proj \"").Append(this.projectFile).Append('\"'); } if (!this.projectArgs.IsNullOrWhiteSpace()) { - arguments.Append($" /projargs \"{this.projectArgs}\""); + arguments.Append(" /projargs \"").Append(this.projectArgs).Append('\"'); } if (!this.LogFile.IsNullOrWhiteSpace()) { - arguments.Append($" /l \"{this.LogFile}\""); + arguments.Append(" /l \"").Append(this.LogFile).Append('\"'); } arguments.Append(this.additionalArguments); diff --git a/src/GitVersion.App.Tests/Helpers/AssemblyParallelizable.cs b/src/GitVersion.App.Tests/Helpers/AssemblyParallelizable.cs index 9ae285d9ea..fdd365b7e2 100644 --- a/src/GitVersion.App.Tests/Helpers/AssemblyParallelizable.cs +++ b/src/GitVersion.App.Tests/Helpers/AssemblyParallelizable.cs @@ -1,3 +1 @@ -using NUnit.Framework; - [assembly: Parallelizable(ParallelScope.Fixtures)] diff --git a/src/GitVersion.App.Tests/Helpers/ExecutionResults.cs b/src/GitVersion.App.Tests/Helpers/ExecutionResults.cs index c56e6aef9d..141b29b36a 100644 --- a/src/GitVersion.App.Tests/Helpers/ExecutionResults.cs +++ b/src/GitVersion.App.Tests/Helpers/ExecutionResults.cs @@ -1,29 +1,26 @@ +using GitVersion.Core.Tests; +using GitVersion.Extensions; using GitVersion.OutputVariables; namespace GitVersion.App.Tests; -public class ExecutionResults +public class ExecutionResults(int exitCode, string? output, string? logContents = null) { - public ExecutionResults(int exitCode, string output, string? logContents) - { - ExitCode = exitCode; - Output = output; - Log = logContents; - } + public int ExitCode { get; init; } = exitCode; + public string? Output { get; init; } = output; + public string? Log { get; init; } = logContents; - public int ExitCode { get; } - public string Output { get; } - public string? Log { get; } - - public virtual VersionVariables OutputVariables + public GitVersionVariables? OutputVariables { get { - var jsonStartIndex = Output.IndexOf("{", StringComparison.Ordinal); - var jsonEndIndex = Output.IndexOf("}", StringComparison.Ordinal); + if (Output.IsNullOrWhiteSpace()) return null; + + var jsonStartIndex = Output.IndexOf('{'); + var jsonEndIndex = Output.IndexOf('}'); var json = Output.Substring(jsonStartIndex, jsonEndIndex - jsonStartIndex + 1); - return VersionVariables.FromJson(json); + return json.ToGitVersionVariables(); } } } diff --git a/src/GitVersion.App.Tests/Helpers/GitVersionHelper.cs b/src/GitVersion.App.Tests/Helpers/GitVersionHelper.cs index a06dc99b2c..1c18f476be 100644 --- a/src/GitVersion.App.Tests/Helpers/GitVersionHelper.cs +++ b/src/GitVersion.App.Tests/Helpers/GitVersionHelper.cs @@ -1,4 +1,4 @@ -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; using GitVersion.Helpers; @@ -36,7 +36,7 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments, params KeyValuePair[] environments ) { - var executable = ExecutableHelper.GetExecutable(); + var executable = ExecutableHelper.GetDotNetExecutable(); var output = new StringBuilder(); var environmentalVariables = new Dictionary @@ -52,14 +52,7 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments, foreach (var (key, value) in environments) { - if (environmentalVariables.ContainsKey(key)) - { - environmentalVariables[key] = value; - } - else - { - environmentalVariables.Add(key, value); - } + environmentalVariables[key] = value; } var exitCode = -1; @@ -78,7 +71,7 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments, executable, args, arguments.WorkingDirectory, - environmentalVariables.ToArray()); + [.. environmentalVariables]); } catch (Exception exception) { @@ -98,7 +91,7 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments, if (arguments.LogFile.IsNullOrWhiteSpace() || !File.Exists(arguments.LogFile)) { - return new ExecutionResults(exitCode, output.ToString(), null); + return new(exitCode, output.ToString()); } var logContents = File.ReadAllText(arguments.LogFile); @@ -109,6 +102,6 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments, Console.WriteLine(); Console.WriteLine("-------------------------------------------------------"); - return new ExecutionResults(exitCode, output.ToString(), logContents); + return new(exitCode, output.ToString(), logContents); } } diff --git a/src/GitVersion.App.Tests/Helpers/ProgramFixture.cs b/src/GitVersion.App.Tests/Helpers/ProgramFixture.cs index 20979e643c..1fa2d6268c 100644 --- a/src/GitVersion.App.Tests/Helpers/ProgramFixture.cs +++ b/src/GitVersion.App.Tests/Helpers/ProgramFixture.cs @@ -1,7 +1,6 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; using GitVersion.Logging; -using GitVersion.OutputVariables; using Microsoft.Extensions.DependencyInjection; namespace GitVersion.App.Tests; @@ -9,7 +8,7 @@ namespace GitVersion.App.Tests; public sealed class ProgramFixture { private readonly IEnvironment environment; - private List> Overrides { get; } = new(); + private List> Overrides { get; } = []; private readonly Lazy logger; private readonly Lazy output; @@ -23,19 +22,19 @@ public ProgramFixture(string workingDirectory = "") ILog log = new Log(logAppender); var consoleBuilder = new StringBuilder(); - IConsole consoleAdapter = new TestConsoleAdapter(consoleBuilder); + var consoleAdapter = new TestConsoleAdapter(consoleBuilder); this.environment = new TestEnvironment(); - Overrides.Add(services => + WithOverrides(services => { services.AddSingleton(log); - services.AddSingleton(consoleAdapter); + services.AddSingleton(consoleAdapter); services.AddSingleton(this.environment); }); - this.logger = new Lazy(() => logBuilder.ToString()); - this.output = new Lazy(() => consoleAdapter.ToString()); + this.logger = new(() => logBuilder.ToString()); + this.output = new(() => consoleAdapter.ToString()); } public void WithEnv(params KeyValuePair[] envs) @@ -46,50 +45,25 @@ public void WithEnv(params KeyValuePair[] envs) } } - public Task Run(string arg) + public void WithOverrides(Action action) => Overrides.Add(action); + + public Task Run(string arg) { var args = arg.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray(); return Run(args); } - public async Task Run(params string[] args) + public async Task Run(params string[] args) { // Create the application and override registrations. var program = new Program(builder => Overrides.ForEach(action => action(builder))); if (!this.workingDirectory.IsNullOrWhiteSpace()) { - args = new[] { "-targetpath", this.workingDirectory }.Concat(args).ToArray(); + args = ["-targetpath", this.workingDirectory, .. args]; } await program.RunAsync(args); - return new ProgramFixtureResult - { - ExitCode = System.Environment.ExitCode, - Output = this.output.Value, - Log = this.logger.Value - }; + return new(SysEnv.ExitCode, this.output.Value, this.logger.Value); } } - -public class ProgramFixtureResult -{ - public int ExitCode { get; set; } - public string? Output { get; set; } - public string Log { get; set; } - - public VersionVariables? OutputVariables - { - get - { - if (Output.IsNullOrWhiteSpace()) return null; - - var jsonStartIndex = Output.IndexOf("{", StringComparison.Ordinal); - var jsonEndIndex = Output.IndexOf("}", StringComparison.Ordinal); - var json = Output.Substring(jsonStartIndex, jsonEndIndex - jsonStartIndex + 1); - - return VersionVariables.FromJson(json); - } - } - -} diff --git a/src/GitVersion.App.Tests/Helpers/TestConsoleAdapter.cs b/src/GitVersion.App.Tests/Helpers/TestConsoleAdapter.cs deleted file mode 100644 index b5ce351058..0000000000 --- a/src/GitVersion.App.Tests/Helpers/TestConsoleAdapter.cs +++ /dev/null @@ -1,20 +0,0 @@ -using GitVersion.Logging; - -namespace GitVersion.App.Tests; - -public class TestConsoleAdapter : IConsole -{ - private readonly StringBuilder sb; - public TestConsoleAdapter(StringBuilder sb) => this.sb = sb; - public void WriteLine(string? msg) => this.sb.AppendLine(msg); - - public void WriteLine() => this.sb.AppendLine(); - - public void Write(string? msg) => this.sb.Append(msg); - - public override string ToString() => this.sb.ToString(); - - public string ReadLine() => throw new NotImplementedException(); - - public IDisposable UseColor(ConsoleColor consoleColor) => Disposable.Empty; -} diff --git a/src/GitVersion.App.Tests/JsonOutputOnBuildServerTest.cs b/src/GitVersion.App.Tests/JsonOutputOnBuildServerTest.cs index 6a41333cd7..86c373ff4e 100644 --- a/src/GitVersion.App.Tests/JsonOutputOnBuildServerTest.cs +++ b/src/GitVersion.App.Tests/JsonOutputOnBuildServerTest.cs @@ -1,9 +1,6 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; +using GitVersion.Core.Tests; using GitVersion.Helpers; -using GitVersion.OutputVariables; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -37,10 +34,11 @@ public void BeingOnBuildServerWithOutputJsonDoesNotFail() var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: " /output json /output buildserver", environments: env); result.ExitCode.ShouldBe(0); - const string version = "0.1.0+4"; - result.Output.ShouldContain($"##teamcity[buildNumber '{version}']"); + const string expectedVersion = "0.0.1-5"; + result.Output.ShouldNotBeNull(); + result.Output.ShouldContain($"##teamcity[buildNumber '{expectedVersion}']"); result.OutputVariables.ShouldNotBeNull(); - result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(version); + result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(expectedVersion); } [TestCase("", "GitVersion.json")] @@ -56,16 +54,17 @@ public void BeingOnBuildServerWithOutputJsonAndOutputFileDoesNotFail(string outp var result = GitVersionHelper.ExecuteIn(fixture.LocalRepositoryFixture.RepositoryPath, arguments: $" /output json /output buildserver /output file /outputfile {outputFile}", environments: env); result.ExitCode.ShouldBe(0); - const string version = "0.1.0+4"; - result.Output.ShouldContain($"##teamcity[buildNumber '{version}']"); + const string expectedVersion = "0.0.1-5"; + result.Output.ShouldNotBeNull(); + result.Output.ShouldContain($"##teamcity[buildNumber '{expectedVersion}']"); result.OutputVariables.ShouldNotBeNull(); - result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(version); + result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(expectedVersion); var filePath = PathHelper.Combine(fixture.LocalRepositoryFixture.RepositoryPath, fileName); var json = File.ReadAllText(filePath); - var outputVariables = VersionVariables.FromJson(json); + var outputVariables = json.ToGitVersionVariables(); outputVariables.ShouldNotBeNull(); - outputVariables.FullSemVer.ShouldBeEquivalentTo(version); + outputVariables.FullSemVer.ShouldBeEquivalentTo(expectedVersion); } } diff --git a/src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs b/src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs index dbdf5342f8..9fb5e7db11 100644 --- a/src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs +++ b/src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs @@ -1,9 +1,10 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests.Helpers; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Helpers; +using GitVersion.Output; using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -12,13 +13,13 @@ public class PullRequestInBuildAgentTest { private const string PullRequestBranchName = "PR-5"; private static readonly string[] PrMergeRefs = - { + [ "refs/pull-requests/5/merge", "refs/pull/5/merge", "refs/heads/pull/5/head", "refs/remotes/pull/5/merge", "refs/remotes/pull-requests/5/merge" - }; + ]; [TestCaseSource(nameof(PrMergeRefs))] public async Task VerifyAzurePipelinesPullRequest(string pullRequestRef) @@ -132,7 +133,6 @@ public async Task VerifyTravisCIPullRequest(string pullRequestRef) [TestCaseSource(nameof(PrMergeRefs))] public async Task VerifyBitBucketPipelinesPullRequest(string pullRequestRef) { - var env = new Dictionary { { BitBucketPipelines.EnvironmentVariableName, "MyWorkspace" }, @@ -143,9 +143,9 @@ public async Task VerifyBitBucketPipelinesPullRequest(string pullRequestRef) private static async Task VerifyPullRequestVersionIsCalculatedProperly(string pullRequestRef, Dictionary env) { - using var fixture = new EmptyRepositoryFixture("main"); - var remoteRepositoryPath = ExecutableHelper.GetTempPath(); - RepositoryFixtureBase.Init(remoteRepositoryPath, "main"); + using var fixture = new EmptyRepositoryFixture(); + var remoteRepositoryPath = PathHelper.GetRepositoryTempPath(); + RepositoryFixtureBase.Init(remoteRepositoryPath); using (var remoteRepository = new Repository(remoteRepositoryPath)) { remoteRepository.Config.Set("user.name", "Test"); @@ -164,39 +164,47 @@ private static async Task VerifyPullRequestVersionIsCalculatedProperly(string pu remoteRepository.Refs.Add(pullRequestRef, new ObjectId(mergeCommitSha)); // Checkout PR commit - Commands.Fetch((Repository)fixture.Repository, "origin", Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.Repository, "origin", [], new FetchOptions(), null); Commands.Checkout(fixture.Repository, mergeCommitSha); } var programFixture = new ProgramFixture(fixture.RepositoryPath); - programFixture.WithEnv(env.ToArray()); + programFixture.WithOverrides(services => + { + services.AddModule(new GitVersionBuildAgentsModule()); + services.AddModule(new GitVersionOutputModule()); + }); + programFixture.WithEnv([.. env]); var result = await programFixture.Run(); result.ExitCode.ShouldBe(0); + result.Output.ShouldNotBeNull(); result.OutputVariables.ShouldNotBeNull(); - result.OutputVariables.FullSemVer.ShouldBe("1.0.4-PullRequest0005.3"); + result.OutputVariables.FullSemVer.ShouldBe("1.0.4-PullRequest5.3"); // Cleanup repository files DirectoryHelper.DeleteDirectory(remoteRepositoryPath); } private static readonly object[] PrMergeRefInputs = - { + [ new object[] { "refs/pull-requests/5/merge", "refs/pull-requests/5/merge", false, true, false }, - new object[] { "refs/pull/5/merge", "refs/pull/5/merge", false, true, false}, + new object[] { "refs/pull/5/merge", "refs/pull/5/merge", false, true, false }, new object[] { "refs/heads/pull/5/head", "pull/5/head", true, false, false }, - new object[] { "refs/remotes/pull/5/merge", "pull/5/merge", false, true, true }, - }; + new object[] { "refs/remotes/pull/5/merge", "pull/5/merge", false, true, true } + ]; [TestCaseSource(nameof(PrMergeRefInputs))] public void VerifyPullRequestInput(string pullRequestRef, string friendly, bool isBranch, bool isPullRequest, bool isRemote) { var refName = new ReferenceName(pullRequestRef); - - Assert.AreEqual(friendly, refName.Friendly); - Assert.AreEqual(isBranch, refName.IsBranch); - Assert.AreEqual(isPullRequest, refName.IsPullRequest); - Assert.AreEqual(isRemote, refName.IsRemoteBranch); + Assert.Multiple(() => + { + Assert.That(refName.Friendly, Is.EqualTo(friendly)); + Assert.That(refName.IsLocalBranch, Is.EqualTo(isBranch)); + Assert.That(refName.IsPullRequest, Is.EqualTo(isPullRequest)); + Assert.That(refName.IsRemoteBranch, Is.EqualTo(isRemote)); + }); } } diff --git a/src/GitVersion.App.Tests/QuotedStringHelpersTests.cs b/src/GitVersion.App.Tests/QuotedStringHelpersTests.cs index 678fca3d4c..e615754a2b 100644 --- a/src/GitVersion.App.Tests/QuotedStringHelpersTests.cs +++ b/src/GitVersion.App.Tests/QuotedStringHelpersTests.cs @@ -1,5 +1,4 @@ using GitVersion; -using NUnit.Framework; namespace GitVersionExe.Tests; diff --git a/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs b/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs index 3258565fba..b66e9debf6 100644 --- a/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs +++ b/src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs @@ -1,9 +1,7 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests.Helpers; +using GitVersion.Helpers; using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.App.Tests; @@ -36,9 +34,9 @@ public async Task VerifyTagCheckoutOnGitHubActions() private static async Task VerifyTagCheckoutVersionIsCalculatedProperly(Dictionary env) { - using var fixture = new EmptyRepositoryFixture("main"); - var remoteRepositoryPath = ExecutableHelper.GetTempPath(); - RepositoryFixtureBase.Init(remoteRepositoryPath, "main"); + using var fixture = new EmptyRepositoryFixture(); + var remoteRepositoryPath = PathHelper.GetRepositoryTempPath(); + RepositoryFixtureBase.Init(remoteRepositoryPath); using (var remoteRepository = new Repository(remoteRepositoryPath)) { remoteRepository.Config.Set("user.name", "Test"); @@ -54,12 +52,12 @@ private static async Task VerifyTagCheckoutVersionIsCalculatedProperly(Dictionar remoteRepository.MergeNoFF("release/0.2.0", Generate.SignatureNow()); remoteRepository.MakeATaggedCommit("0.2.0"); - Commands.Fetch((Repository)fixture.Repository, "origin", Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.Repository, "origin", [], new FetchOptions(), null); Commands.Checkout(fixture.Repository, "0.2.0"); } var programFixture = new ProgramFixture(fixture.RepositoryPath); - programFixture.WithEnv(env.ToArray()); + programFixture.WithEnv([.. env]); var result = await programFixture.Run(); diff --git a/src/GitVersion.App.Tests/UpdateWixVersionFileTests.cs b/src/GitVersion.App.Tests/UpdateWixVersionFileTests.cs index bd2672436a..e224aabf53 100644 --- a/src/GitVersion.App.Tests/UpdateWixVersionFileTests.cs +++ b/src/GitVersion.App.Tests/UpdateWixVersionFileTests.cs @@ -1,8 +1,6 @@ -using GitTools.Testing; using GitVersion.Helpers; +using GitVersion.Output.WixUpdater; using GitVersion.OutputVariables; -using GitVersion.VersionConverters.WixUpdater; -using NUnit.Framework; namespace GitVersion.App.Tests; @@ -23,7 +21,7 @@ public void WixVersionFileCreationTest() fixture.MakeACommit(); GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile"); - Assert.IsTrue(File.Exists(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName))); + Assert.That(File.Exists(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName)), Is.True); } [Test] @@ -39,9 +37,9 @@ public void WixVersionFileVarCountTest() GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile"); var gitVersionVarsInWix = GetGitVersionVarsInWixFile(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName)); - var gitVersionVars = VersionVariables.AvailableVariables; + var gitVersionVars = GitVersionVariables.AvailableVariables; - Assert.AreEqual(gitVersionVars.Count(), gitVersionVarsInWix.Count); + Assert.That(gitVersionVarsInWix, Has.Count.EqualTo(gitVersionVars.Count())); } [Test] @@ -53,19 +51,23 @@ public void WixVersionFileContentTest() var gitVersionExecutionResults = GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: null); var vars = gitVersionExecutionResults.OutputVariables; + vars.ShouldNotBeNull(); GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile"); var gitVersionVarsInWix = GetGitVersionVarsInWixFile(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName)); - var gitVersionVars = VersionVariables.AvailableVariables; + var gitVersionVars = GitVersionVariables.AvailableVariables; foreach (var variable in gitVersionVars) { vars.TryGetValue(variable, out var value); - //Make sure the variable is present in the Wix file - Assert.IsTrue(gitVersionVarsInWix.ContainsKey(variable)); - //Make sure the values are equal - Assert.AreEqual(value, gitVersionVarsInWix[variable]); + Assert.Multiple(() => + { + //Make sure the variable is present in the Wix file + Assert.That(gitVersionVarsInWix.ContainsKey(variable), Is.True); + //Make sure the values are equal + Assert.That(gitVersionVarsInWix[variable], Is.EqualTo(value)); + }); } } diff --git a/src/GitVersion.App.Tests/VersionWriterTests.cs b/src/GitVersion.App.Tests/VersionWriterTests.cs index 5ce3a4be1c..36c70d08c3 100644 --- a/src/GitVersion.App.Tests/VersionWriterTests.cs +++ b/src/GitVersion.App.Tests/VersionWriterTests.cs @@ -1,8 +1,8 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; using Microsoft.Extensions.DependencyInjection; -using Mono.Cecil; -using NUnit.Framework; namespace GitVersion.App.Tests; @@ -24,36 +24,39 @@ public void WriteVersionShouldWriteFileVersionWithNoPrereleaseTag() string? version = string.Empty; this.versionWriter.WriteTo(asm, v => version = v); - - Assert.IsNotNull(asm); - Assert.AreEqual("1.0.0", version); + Assert.Multiple(() => + { + Assert.That(asm, Is.Not.Null); + Assert.That(version, Is.EqualTo("1.0.0")); + }); } [Test] public void WriteVersionShouldWriteFileVersionWithPrereleaseTag() { - var asm = GenerateAssembly(new Version(1, 0, 0), "-beta0004"); + var asm = GenerateAssembly(new Version(1, 0, 0), "-beta4"); string? version = string.Empty; this.versionWriter.WriteTo(asm, v => version = v); - - Assert.IsNotNull(asm); - Assert.AreEqual("1.0.0-beta0004", version); + Assert.Multiple(() => + { + Assert.That(asm, Is.Not.Null); + Assert.That(version, Is.EqualTo("1.0.0-beta4")); + }); } private static Assembly GenerateAssembly(Version fileVersion, string prereleaseInfo) { - var definition = new AssemblyNameDefinition("test-asm", fileVersion); - - var asmDef = AssemblyDefinition.CreateAssembly(definition, "test-asm", ModuleKind.Dll); - var constructor = typeof(AssemblyInformationalVersionAttribute).GetConstructor(new[] { typeof(string) }); - var methodReference = asmDef.MainModule.ImportReference(constructor); - var customAttribute = new CustomAttribute(methodReference); - customAttribute.ConstructorArguments.Add(new CustomAttributeArgument(asmDef.MainModule.TypeSystem.String, fileVersion + prereleaseInfo)); - asmDef.CustomAttributes.Add(customAttribute); + var attribute = typeof(AssemblyInformationalVersionAttribute); + var csharpCode = $@"[assembly: {attribute.FullName}(""{fileVersion + prereleaseInfo}"")]"; + var compilation = CSharpCompilation.Create("test-asm") + .WithOptions(new(OutputKind.DynamicallyLinkedLibrary)) + .AddReferences(MetadataReference.CreateFromFile(typeof(object).Assembly.Location)) + .AddReferences(MetadataReference.CreateFromFile(attribute.Assembly.Location)) + .AddSyntaxTrees(CSharpSyntaxTree.ParseText(csharpCode)); using var memoryStream = new MemoryStream(); - asmDef.Write(memoryStream); + compilation.Emit(memoryStream); return Assembly.Load(memoryStream.ToArray()); } diff --git a/src/GitVersion.App/ArgumentParser.cs b/src/GitVersion.App/ArgumentParser.cs index 0214ad1524..dc16d9d7ca 100644 --- a/src/GitVersion.App/ArgumentParser.cs +++ b/src/GitVersion.App/ArgumentParser.cs @@ -1,27 +1,21 @@ -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model; using GitVersion.OutputVariables; namespace GitVersion; -public class ArgumentParser : IArgumentParser +internal class ArgumentParser(IEnvironment environment, ICurrentBuildAgent buildAgent, IConsole console, IGlobbingResolver globbingResolver) + : IArgumentParser { - private readonly IEnvironment environment; - private readonly ICurrentBuildAgent buildAgent; - private readonly IConsole console; - private readonly IGlobbingResolver globbingResolver; - private const string defaultOutputFileName = "GitVersion.json"; + private readonly IEnvironment environment = environment.NotNull(); + private readonly ICurrentBuildAgent buildAgent = buildAgent.NotNull(); + private readonly IConsole console = console.NotNull(); + private readonly IGlobbingResolver globbingResolver = globbingResolver.NotNull(); - public ArgumentParser(IEnvironment environment, ICurrentBuildAgent buildAgent, IConsole console, IGlobbingResolver globbingResolver) - { - this.environment = environment.NotNull(); - this.console = console.NotNull(); - this.globbingResolver = globbingResolver.NotNull(); - this.buildAgent = buildAgent.NotNull(); - } + private const string defaultOutputFileName = "GitVersion.json"; + private static readonly IEnumerable availableVariables = GitVersionVariables.AvailableVariables; public Arguments ParseArguments(string commandLineArguments) { @@ -36,7 +30,7 @@ public Arguments ParseArguments(string[] commandLineArguments) { var args = new Arguments { - TargetPath = System.Environment.CurrentDirectory + TargetPath = SysEnv.CurrentDirectory }; args.Output.Add(OutputType.Json); @@ -48,16 +42,7 @@ public Arguments ParseArguments(string[] commandLineArguments) return args; } - var firstArgument = commandLineArguments.First(); - - if (firstArgument.IsInit()) - { - return new Arguments - { - TargetPath = System.Environment.CurrentDirectory, - Init = true - }; - } + var firstArgument = commandLineArguments[0]; if (firstArgument.IsHelp()) { @@ -99,7 +84,7 @@ public Arguments ParseArguments(string[] commandLineArguments) // If the first argument is a switch, it should already have been consumed in the above loop, // or else a WarningException should have been thrown and we wouldn't end up here. arguments.TargetPath ??= firstArgumentIsSwitch - ? System.Environment.CurrentDirectory + ? SysEnv.CurrentDirectory : firstArgument; arguments.TargetPath = arguments.TargetPath.TrimEnd('/', '\\'); @@ -107,9 +92,28 @@ public Arguments ParseArguments(string[] commandLineArguments) if (!arguments.EnsureAssemblyInfo) arguments.UpdateAssemblyInfoFileName = ResolveFiles(arguments.TargetPath, arguments.UpdateAssemblyInfoFileName).ToHashSet(); arguments.NoFetch = arguments.NoFetch || this.buildAgent.PreventFetch(); + ValidateConfigurationFile(arguments); + return arguments; } + private static void ValidateConfigurationFile(Arguments arguments) + { + if (arguments.ConfigurationFile.IsNullOrWhiteSpace()) return; + + if (Path.IsPathRooted(arguments.ConfigurationFile)) + { + if (!File.Exists(arguments.ConfigurationFile)) throw new WarningException($"Could not find config file at '{arguments.ConfigurationFile}'"); + arguments.ConfigurationFile = Path.GetFullPath(arguments.ConfigurationFile); + } + else + { + var configFilePath = Path.GetFullPath(PathHelper.Combine(arguments.TargetPath, arguments.ConfigurationFile)); + if (!File.Exists(configFilePath)) throw new WarningException($"Could not find config file at '{configFilePath}'"); + arguments.ConfigurationFile = configFilePath; + } + } + private void ParseSwitchArguments(Arguments arguments, NameValueCollection switchesAndValues, int i) { var name = switchesAndValues.AllKeys[i]; @@ -170,7 +174,7 @@ private void ParseTargetPath(Arguments arguments, string? name, IReadOnlyList? values, string? value) @@ -359,19 +368,36 @@ private static void ParseShowVariable(Arguments arguments, string? value, string if (!value.IsNullOrWhiteSpace()) { - versionVariable = VersionVariables.AvailableVariables.SingleOrDefault(av => av.Equals(value.Replace("'", ""), StringComparison.CurrentCultureIgnoreCase)); + versionVariable = availableVariables.SingleOrDefault(av => av.Equals(value.Replace("'", ""), StringComparison.CurrentCultureIgnoreCase)); } if (versionVariable == null) { - var message = $"{name} requires a valid version variable. Available variables are:{System.Environment.NewLine}" + - string.Join(", ", VersionVariables.AvailableVariables.Select(x => string.Concat("'", x, "'"))); + var message = $"{name} requires a valid version variable. Available variables are:{PathHelper.NewLine}" + + string.Join(", ", availableVariables.Select(x => string.Concat("'", x, "'"))); throw new WarningException(message); } arguments.ShowVariable = versionVariable; } + private static void ParseFormat(Arguments arguments, string? value) + { + if (value.IsNullOrWhiteSpace()) + { + throw new WarningException("Format requires a valid format string. Available variables are: " + string.Join(", ", availableVariables)); + } + + var foundVariable = availableVariables.Any(variable => value.Contains(variable, StringComparison.CurrentCultureIgnoreCase)); + + if (!foundVariable) + { + throw new WarningException("Format requires a valid format string. Available variables are: " + string.Join(", ", availableVariables)); + } + + arguments.Format = value; + } + private static void ParseEnsureAssemblyInfo(Arguments arguments, string? value) { arguments.EnsureAssemblyInfo = true; @@ -409,12 +435,7 @@ private static void ParseOutput(Arguments arguments, IEnumerable? values private static void ParseVerbosity(Arguments arguments, string? value) { - // first try the old version, this check will be removed in version 6.0.0, making it a breaking change - if (Enum.TryParse(value, true, out LogLevel logLevel)) - { - arguments.Verbosity = LogExtensions.GetVerbosityForLevel(logLevel); - } - else if (!Enum.TryParse(value, true, out arguments.Verbosity)) + if (!Enum.TryParse(value, true, out arguments.Verbosity)) { throw new WarningException($"Could not parse Verbosity value '{value}'"); } @@ -425,7 +446,7 @@ private static void ParseOverrideConfig(Arguments arguments, IReadOnlyCollection if (values == null || values.Count == 0) return; - var parser = new OverrideConfigOptionParser(); + var parser = new OverrideConfigurationOptionParser(); // key=value foreach (var keyValueOption in values) @@ -437,13 +458,13 @@ private static void ParseOverrideConfig(Arguments arguments, IReadOnlyCollection } var optionKey = keyAndValue[0].ToLowerInvariant(); - if (!OverrideConfigOptionParser.SupportedProperties.Contains(optionKey)) + if (!OverrideConfigurationOptionParser.SupportedProperties.Contains(optionKey)) { throw new WarningException($"Could not parse /overrideconfig option: {keyValueOption}. Unsupported 'key'."); } parser.SetValue(optionKey, keyAndValue[1]); } - arguments.OverrideConfig = parser.GetConfig(); + arguments.OverrideConfiguration = parser.GetOverrideConfiguration(); } private static void ParseUpdateAssemblyInfo(Arguments arguments, string? value, IReadOnlyCollection? values) @@ -543,7 +564,7 @@ private static NameValueCollection CollectSwitchesAndValuesFromArguments(IList TrueValues.Contains(value, StringComparer.OrdinalIgnoreCase); + + public static bool IsFalse(this string? value) => FalseValues.Contains(value, StringComparer.OrdinalIgnoreCase); + + public static bool IsValidPath(this string? path) + { + if (path == null) + return false; + + try + { + _ = PathHelper.GetFullPath(path); + } + catch + { + path = PathHelper.Combine(SysEnv.CurrentDirectory, path); + + try + { + _ = PathHelper.GetFullPath(path); + } + catch + { + return false; + } + } + + return Directory.Exists(path); + } + + public static bool IsSwitchArgument(this string? value) + => value != null + && (value.StartsWith('-') || value.StartsWith('/')) + && !Regex.Match(value, @"/\w+:").Success; //Exclude msbuild & project parameters in form /blah:, which should be parsed as values, not switch names. + + public static bool IsSwitch(this string? value, string switchName) + { + if (value == null) + return false; + + if (value.StartsWith('-')) + { + value = value[1..]; + } + + if (value.StartsWith('/')) + { + value = value[1..]; + } + + return string.Equals(switchName, value, StringComparison.OrdinalIgnoreCase); + } + + public static bool IsHelp(this string singleArgument) => (singleArgument == "?") || singleArgument.IsSwitch("h") || singleArgument.IsSwitch("help") || singleArgument.IsSwitch("?"); + + public static bool ArgumentRequiresValue(this string argument, int argumentIndex) + { + var booleanArguments = new[] { "init", "updateassemblyinfo", "ensureassemblyinfo", "nofetch", "nonormalize", "nocache" }; + + var argumentMightRequireValue = !booleanArguments.Contains(argument[1..], StringComparer.OrdinalIgnoreCase); + + // If this is the first argument that might be a target path, the argument starts with slash, and we're on an OS that supports paths with slashes, the argument does not require a value. + if (argumentMightRequireValue && argumentIndex == 0 && argument.StartsWith('/') && Path.DirectorySeparatorChar == '/' && argument.IsValidPath()) + return false; + + return argumentMightRequireValue; + } +} diff --git a/src/GitVersion.App/Arguments.cs b/src/GitVersion.App/Arguments.cs index 29ba7baaa7..8f5f977a67 100644 --- a/src/GitVersion.App/Arguments.cs +++ b/src/GitVersion.App/Arguments.cs @@ -1,16 +1,15 @@ +using GitVersion.Git; using GitVersion.Logging; -using GitVersion.Model; -using GitVersion.Model.Configuration; namespace GitVersion; -public class Arguments +internal class Arguments { public AuthenticationInfo Authentication = new(); - public string? ConfigFile; - public Config? OverrideConfig; - public bool ShowConfig; + public string? ConfigurationFile; + public IReadOnlyDictionary OverrideConfiguration; + public bool ShowConfiguration; public string? TargetPath; @@ -21,7 +20,6 @@ public class Arguments public string? CommitId; public string? ClonePath; - public bool Init; public bool Diag; public bool IsVersion; public bool IsHelp; @@ -32,6 +30,7 @@ public class Arguments public string? LogFilePath; public string? ShowVariable; + public string? Format; public string? OutputFile; public ISet Output = new HashSet(); public Verbosity Verbosity = Verbosity.Normal; @@ -45,7 +44,7 @@ public GitVersionOptions ToOptions() { var gitVersionOptions = new GitVersionOptions { - AssemblyInfo = + AssemblySettingsInfo = { UpdateProjectFiles = UpdateProjectFiles, UpdateAssemblyInfo = UpdateAssemblyInfo, @@ -53,18 +52,18 @@ public GitVersionOptions ToOptions() Files = UpdateAssemblyInfoFileName }, - Authentication = + AuthenticationInfo = { Username = this.Authentication.Username, Password = this.Authentication.Password, Token = this.Authentication.Token }, - ConfigInfo = + ConfigurationInfo = { - ConfigFile = ConfigFile, - OverrideConfig = OverrideConfig, - ShowConfig = ShowConfig + ConfigurationFile = ConfigurationFile, + OverrideConfiguration = OverrideConfiguration, + ShowConfiguration = ShowConfiguration }, RepositoryInfo = @@ -84,16 +83,16 @@ public GitVersionOptions ToOptions() WixInfo = { - ShouldUpdate = UpdateWixVersionFile + UpdateWixVersionFile = UpdateWixVersionFile }, - Init = Init, Diag = Diag, IsVersion = IsVersion, IsHelp = IsHelp, LogFilePath = LogFilePath, ShowVariable = ShowVariable, + Format = Format, Verbosity = Verbosity, Output = Output, OutputFile = OutputFile diff --git a/src/GitVersion.App/AssemblyInfo.cs b/src/GitVersion.App/AssemblyInfo.cs deleted file mode 100644 index 83c2d3c0f9..0000000000 --- a/src/GitVersion.App/AssemblyInfo.cs +++ /dev/null @@ -1,4 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("AcceptanceTests")] -[assembly: InternalsVisibleTo("GitVersion.App.Tests")] diff --git a/src/GitVersion.App/GitVersion.App.csproj b/src/GitVersion.App/GitVersion.App.csproj index 19bfe98c4d..b3168be34e 100644 --- a/src/GitVersion.App/GitVersion.App.csproj +++ b/src/GitVersion.App/GitVersion.App.csproj @@ -4,20 +4,10 @@ Exe GitVersion gitversion - netcoreapp3.1;net5.0;net6.0 AnyCPU MIT - - net48;$(TargetFrameworks); - - - - - net6.0 - - dotnet-gitversion GitVersion.Tool @@ -25,28 +15,24 @@ Derives SemVer information from a repository following GitFlow or GitHubFlow. This is the .NET Core Global Tool allowing usage of GitVersion from command line. - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - + + + + + + + + + diff --git a/src/GitVersion.App/GitVersionApp.cs b/src/GitVersion.App/GitVersionApp.cs index 389acc127b..596675bd0c 100644 --- a/src/GitVersion.App/GitVersionApp.cs +++ b/src/GitVersion.App/GitVersionApp.cs @@ -5,32 +5,26 @@ namespace GitVersion; -internal class GitVersionApp : IHostedService +internal class GitVersionApp(ILog log, IHostApplicationLifetime applicationLifetime, IGitVersionExecutor gitVersionExecutor, IOptions options) + : IHostedService { - private readonly IHostApplicationLifetime applicationLifetime; - private readonly IGitVersionExecutor gitVersionExecutor; - private readonly ILog log; - private readonly IOptions options; + private readonly ILog log = log.NotNull(); + private readonly IHostApplicationLifetime applicationLifetime = applicationLifetime.NotNull(); + private readonly IGitVersionExecutor gitVersionExecutor = gitVersionExecutor.NotNull(); + private readonly IOptions options = options.NotNull(); - public GitVersionApp(IHostApplicationLifetime applicationLifetime, IGitVersionExecutor gitVersionExecutor, ILog log, IOptions options) - { - this.options = options.NotNull(); - this.applicationLifetime = applicationLifetime.NotNull(); - this.gitVersionExecutor = gitVersionExecutor.NotNull(); - this.log = log.NotNull(); - } public Task StartAsync(CancellationToken cancellationToken) { try { var gitVersionOptions = this.options.Value; this.log.Verbosity = gitVersionOptions.Verbosity; - System.Environment.ExitCode = this.gitVersionExecutor.Execute(gitVersionOptions); + SysEnv.ExitCode = this.gitVersionExecutor.Execute(gitVersionOptions); } catch (Exception exception) { Console.Error.WriteLine(exception.Message); - System.Environment.ExitCode = 1; + SysEnv.ExitCode = 1; } this.applicationLifetime.StopApplication(); diff --git a/src/GitVersion.App/GitVersionAppModule.cs b/src/GitVersion.App/GitVersionAppModule.cs index abbfe807e7..b635179377 100644 --- a/src/GitVersion.App/GitVersionAppModule.cs +++ b/src/GitVersion.App/GitVersionAppModule.cs @@ -2,7 +2,7 @@ namespace GitVersion; -public class GitVersionAppModule : IGitVersionModule +internal class GitVersionAppModule : IGitVersionModule { public void RegisterTypes(IServiceCollection services) { diff --git a/src/GitVersion.App/GitVersionExecutor.cs b/src/GitVersion.App/GitVersionExecutor.cs index eb4df79884..0d07fc82bc 100644 --- a/src/GitVersion.App/GitVersionExecutor.cs +++ b/src/GitVersion.App/GitVersionExecutor.cs @@ -1,39 +1,35 @@ using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model; namespace GitVersion; -public class GitVersionExecutor : IGitVersionExecutor +internal class GitVersionExecutor( + ILog log, + IConsole console, + IConfigurationFileLocator configurationFileLocator, + IConfigurationProvider configurationProvider, + IConfigurationSerializer configurationSerializer, + IGitVersionCalculateTool gitVersionCalculateTool, + IGitVersionOutputTool gitVersionOutputTool, + IVersionWriter versionWriter, + IHelpWriter helpWriter, + IGitRepositoryInfo repositoryInfo) + : IGitVersionExecutor { - private readonly ILog log; - private readonly IConsole console; - private readonly IConfigFileLocator configFileLocator; - private readonly IHelpWriter helpWriter; - private readonly IGitRepositoryInfo repositoryInfo; - private readonly IConfigProvider configProvider; - private readonly IGitVersionCalculateTool gitVersionCalculateTool; - private readonly IGitVersionOutputTool gitVersionOutputTool; - private readonly IVersionWriter versionWriter; - - public GitVersionExecutor(ILog log, IConsole console, - IConfigFileLocator configFileLocator, IConfigProvider configProvider, - IGitVersionCalculateTool gitVersionCalculateTool, IGitVersionOutputTool gitVersionOutputTool, - IVersionWriter versionWriter, IHelpWriter helpWriter, IGitRepositoryInfo repositoryInfo) - { - this.log = log.NotNull(); - this.console = console.NotNull(); - this.configFileLocator = configFileLocator.NotNull(); - this.configProvider = configProvider.NotNull(); - - this.gitVersionCalculateTool = gitVersionCalculateTool.NotNull(); - this.gitVersionOutputTool = gitVersionOutputTool.NotNull(); - - this.versionWriter = versionWriter.NotNull(); - this.helpWriter = helpWriter.NotNull(); - this.repositoryInfo = repositoryInfo.NotNull(); - } + private readonly ILog log = log.NotNull(); + private readonly IConsole console = console.NotNull(); + private readonly IConfigurationFileLocator configurationFileLocator = configurationFileLocator.NotNull(); + private readonly IConfigurationProvider configurationProvider = configurationProvider.NotNull(); + private readonly IConfigurationSerializer configurationSerializer = configurationSerializer.NotNull(); + + private readonly IGitVersionCalculateTool gitVersionCalculateTool = gitVersionCalculateTool.NotNull(); + private readonly IGitVersionOutputTool gitVersionOutputTool = gitVersionOutputTool.NotNull(); + private readonly IVersionWriter versionWriter = versionWriter.NotNull(); + private readonly IHelpWriter helpWriter = helpWriter.NotNull(); + private readonly IGitRepositoryInfo repositoryInfo = repositoryInfo.NotNull(); public int Execute(GitVersionOptions gitVersionOptions) { @@ -65,21 +61,21 @@ private int RunGitVersionTool(GitVersionOptions gitVersionOptions) var variables = this.gitVersionCalculateTool.CalculateVersionVariables(); - var configuration = this.configProvider.Provide(gitVersionOptions.ConfigInfo.OverrideConfig); + var configuration = this.configurationProvider.Provide(gitVersionOptions.ConfigurationInfo.OverrideConfiguration); - this.gitVersionOutputTool.OutputVariables(variables, configuration.UpdateBuildNumber ?? true); + this.gitVersionOutputTool.OutputVariables(variables, configuration.UpdateBuildNumber); this.gitVersionOutputTool.UpdateAssemblyInfo(variables); this.gitVersionOutputTool.UpdateWixVersionFile(variables); } catch (WarningException exception) { - var error = $"An error occurred:{System.Environment.NewLine}{exception.Message}"; + var error = $"An error occurred:{PathHelper.NewLine}{exception.Message}"; this.log.Warning(error); return 1; } catch (Exception exception) { - var error = $"An unexpected error occurred:{System.Environment.NewLine}{exception}"; + var error = $"An unexpected error occurred:{PathHelper.NewLine}{exception}"; this.log.Error(error); this.log.Info("Attempting to show the current git graph (please include in issue): "); @@ -144,19 +140,15 @@ private bool HandleNonMainCommand(GitVersionOptions gitVersionOptions, out int e this.log.Info("Working directory: " + workingDirectory); } - this.configFileLocator.Verify(gitVersionOptions, this.repositoryInfo); - - if (gitVersionOptions.Init) - { - this.configProvider.Init(workingDirectory); - exitCode = 0; - return true; - } - - if (gitVersionOptions.ConfigInfo.ShowConfig) + if (gitVersionOptions.ConfigurationInfo.ShowConfiguration) { - var config = this.configProvider.Provide(workingDirectory); - this.console.WriteLine(config.ToString()); + if (gitVersionOptions.RepositoryInfo.TargetUrl.IsNullOrWhiteSpace()) + { + this.configurationFileLocator.Verify(workingDirectory, this.repositoryInfo.ProjectRootDirectory); + } + var configuration = this.configurationProvider.Provide(); + var configurationString = configurationSerializer.Serialize(configuration); + this.console.WriteLine(configurationString); exitCode = 0; return true; } @@ -167,7 +159,7 @@ private bool HandleNonMainCommand(GitVersionOptions gitVersionOptions, out int e private static void ConfigureLogging(GitVersionOptions gitVersionOptions, ILog log) { - if (gitVersionOptions.Output.Contains(OutputType.BuildServer) || gitVersionOptions.LogFilePath == "console" || gitVersionOptions.Init) + if (gitVersionOptions.Output.Contains(OutputType.BuildServer) || gitVersionOptions.LogFilePath == "console") { log.AddLogAppender(new ConsoleAppender()); } diff --git a/src/GitVersion.App/GlobbingResolver.cs b/src/GitVersion.App/GlobbingResolver.cs index a79712f67f..43851b5435 100644 --- a/src/GitVersion.App/GlobbingResolver.cs +++ b/src/GitVersion.App/GlobbingResolver.cs @@ -3,7 +3,7 @@ namespace GitVersion; -public class GlobbingResolver : IGlobbingResolver +internal class GlobbingResolver : IGlobbingResolver { private readonly Matcher matcher = new(StringComparison.OrdinalIgnoreCase); diff --git a/src/GitVersion.App/HelpWriter.cs b/src/GitVersion.App/HelpWriter.cs index 664e281207..8ba9ed8e84 100644 --- a/src/GitVersion.App/HelpWriter.cs +++ b/src/GitVersion.App/HelpWriter.cs @@ -1,18 +1,13 @@ using GitVersion.Extensions; +using GitVersion.Helpers; using GitVersion.Logging; namespace GitVersion; -public class HelpWriter : IHelpWriter +internal class HelpWriter(IVersionWriter versionWriter, IConsole console) : IHelpWriter { - private readonly IVersionWriter versionWriter; - private readonly IConsole console; - - public HelpWriter(IVersionWriter versionWriter, IConsole console) - { - this.versionWriter = versionWriter.NotNull(); - this.console = console.NotNull(); - } + private readonly IVersionWriter versionWriter = versionWriter.NotNull(); + private readonly IConsole console = console.NotNull(); public void Write() => WriteTo(this.console.WriteLine); @@ -23,8 +18,7 @@ public void WriteTo(Action writeAction) this.versionWriter.WriteTo(assembly, v => version = v); var args = ArgumentList(); - var nl = System.Environment.NewLine; - var message = "GitVersion " + version + nl + nl + args; + var message = $"GitVersion {version}{PathHelper.NewLine}{PathHelper.NewLine}{args}"; writeAction(message); } diff --git a/src/GitVersion.App/IArgumentParser.cs b/src/GitVersion.App/IArgumentParser.cs index 0b54023c06..df71145f08 100644 --- a/src/GitVersion.App/IArgumentParser.cs +++ b/src/GitVersion.App/IArgumentParser.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public interface IArgumentParser +internal interface IArgumentParser { Arguments ParseArguments(string commandLineArguments); Arguments ParseArguments(string[] commandLineArguments); diff --git a/src/GitVersion.App/IGitVersionExecutor.cs b/src/GitVersion.App/IGitVersionExecutor.cs index 0bca364649..d65689e765 100644 --- a/src/GitVersion.App/IGitVersionExecutor.cs +++ b/src/GitVersion.App/IGitVersionExecutor.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public interface IGitVersionExecutor +internal interface IGitVersionExecutor { int Execute(GitVersionOptions gitVersionOptions); } diff --git a/src/GitVersion.App/IGlobbingResolver.cs b/src/GitVersion.App/IGlobbingResolver.cs index 161e649067..a65374573d 100644 --- a/src/GitVersion.App/IGlobbingResolver.cs +++ b/src/GitVersion.App/IGlobbingResolver.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public interface IGlobbingResolver +internal interface IGlobbingResolver { public IEnumerable Resolve(string workingDirectory, string pattern); } diff --git a/src/GitVersion.App/IHelpWriter.cs b/src/GitVersion.App/IHelpWriter.cs index 81c7b998b8..652badd469 100644 --- a/src/GitVersion.App/IHelpWriter.cs +++ b/src/GitVersion.App/IHelpWriter.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public interface IHelpWriter +internal interface IHelpWriter { void Write(); void WriteTo(Action writeAction); diff --git a/src/GitVersion.App/IVersionWriter.cs b/src/GitVersion.App/IVersionWriter.cs index 736ec6a6f6..cadaec1b79 100644 --- a/src/GitVersion.App/IVersionWriter.cs +++ b/src/GitVersion.App/IVersionWriter.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public interface IVersionWriter +internal interface IVersionWriter { void Write(Assembly assembly); void WriteTo(Assembly assembly, Action writeAction); diff --git a/src/GitVersion.App/OverrideConfigOptionParser.cs b/src/GitVersion.App/OverrideConfigOptionParser.cs deleted file mode 100644 index 4f18f59b03..0000000000 --- a/src/GitVersion.App/OverrideConfigOptionParser.cs +++ /dev/null @@ -1,101 +0,0 @@ -using GitVersion.Model.Configuration; -using YamlDotNet.Serialization; - -namespace GitVersion; - -internal class OverrideConfigOptionParser -{ - private static readonly Lazy> _lazySupportedProperties = - new(GetSupportedProperties, true); - - private readonly Lazy lazyConfig = new(); - - internal static ILookup SupportedProperties => _lazySupportedProperties.Value; - - /// - /// Dynamically creates of - /// properties supported as a part of command line '/overrideconfig' option. - /// - /// - /// - /// Lookup keys are created from to match 'GitVersion.yml' - /// options as close as possible. - /// - private static ILookup GetSupportedProperties() => typeof(Config).GetProperties(BindingFlags.Public | BindingFlags.Instance) - .Where( - pi => IsSupportedPropertyType(pi.PropertyType) - && pi.CanWrite - && pi.GetCustomAttributes(typeof(YamlMemberAttribute), false).Length > 0 - ) - .ToLookup( - pi => (pi.GetCustomAttributes(typeof(YamlMemberAttribute), false)[0] as YamlMemberAttribute)?.Alias, - pi => pi - ); - - /// - /// Checks if property of - /// is supported as a part of command line '/overrideconfig' option. - /// - /// Type we want to check. - /// True, if type is supported. - /// Only simple types are supported - private static bool IsSupportedPropertyType(Type propertyType) - { - Type unwrappedType = Nullable.GetUnderlyingType(propertyType) ?? propertyType; - - return unwrappedType == typeof(string) - || unwrappedType.IsEnum - || unwrappedType == typeof(int) - || unwrappedType == typeof(bool); - } - - internal void SetValue(string key, string value) - { - if (!SupportedProperties.Contains(key)) - return; - - var unwrappedText = QuotedStringHelpers.UnquoteText(value); - foreach (var pi in SupportedProperties[key]) - { - Type unwrapped = Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType; - - if (unwrapped == typeof(string)) - pi.SetValue(this.lazyConfig.Value, unwrappedText); - else if (unwrapped.IsEnum) - { - try - { - var parsedEnum = Enum.Parse(unwrapped, unwrappedText); - pi.SetValue(this.lazyConfig.Value, parsedEnum); - } - catch (ArgumentException) - { - var sb = new StringBuilder(); - - sb.Append($"Could not parse /overrideconfig option: {key}={value}."); - sb.AppendLine(" Ensure that 'value' is valid for specified 'key' enumeration: "); - foreach (var name in Enum.GetNames(unwrapped)) - sb.AppendLine(name); - - throw new WarningException(sb.ToString()); - } - } - else if (unwrapped == typeof(int)) - { - if (int.TryParse(unwrappedText, out int parsedInt)) - pi.SetValue(this.lazyConfig.Value, parsedInt); - else - throw new WarningException($"Could not parse /overrideconfig option: {key}={value}. Ensure that 'value' is valid integer number."); - } - else if (unwrapped == typeof(bool)) - { - if (bool.TryParse(unwrappedText, out bool parsedBool)) - pi.SetValue(this.lazyConfig.Value, parsedBool); - else - throw new WarningException($"Could not parse /overrideconfig option: {key}={value}. Ensure that 'value' is 'true' or 'false'."); - } - } - } - - internal Config? GetConfig() => this.lazyConfig.IsValueCreated ? this.lazyConfig.Value : null; -} diff --git a/src/GitVersion.App/OverrideConfigurationOptionParser.cs b/src/GitVersion.App/OverrideConfigurationOptionParser.cs new file mode 100644 index 0000000000..9b85428f71 --- /dev/null +++ b/src/GitVersion.App/OverrideConfigurationOptionParser.cs @@ -0,0 +1,54 @@ +using GitVersion.Configuration; + +namespace GitVersion; + +internal class OverrideConfigurationOptionParser +{ + private readonly Dictionary overrideConfiguration = []; + + private static readonly Lazy> _lazySupportedProperties = + new(GetSupportedProperties, true); + + internal static ILookup SupportedProperties => _lazySupportedProperties.Value; + + /// + /// Dynamically creates of + /// properties supported as a part of command line '/overrideconfig' option. + /// + /// + /// + /// Lookup keys are created from to match 'GitVersion.yml' or 'GitVersion.yaml' file + /// options as close as possible. + /// + private static ILookup GetSupportedProperties() => typeof(GitVersionConfiguration).GetProperties(BindingFlags.Public | BindingFlags.Instance) + .Where( + pi => IsSupportedPropertyType(pi.PropertyType) + && pi.CanWrite + && pi.GetCustomAttributes(typeof(JsonPropertyNameAttribute), false).Length > 0 + ) + .ToLookup( + pi => (pi.GetCustomAttributes(typeof(JsonPropertyNameAttribute), false)[0] as JsonPropertyNameAttribute)?.Name, + pi => pi + ); + + /// + /// Checks if property of + /// is supported as a part of command line '/overrideconfig' option. + /// + /// Type we want to check. + /// True, if type is supported. + /// Only simple types are supported + private static bool IsSupportedPropertyType(Type propertyType) + { + Type unwrappedType = Nullable.GetUnderlyingType(propertyType) ?? propertyType; + + return unwrappedType == typeof(string) + || unwrappedType.IsEnum + || unwrappedType == typeof(int) + || unwrappedType == typeof(bool); + } + + internal void SetValue(string key, string value) => overrideConfiguration[key] = QuotedStringHelpers.UnquoteText(value); + + internal IReadOnlyDictionary GetOverrideConfiguration() => this.overrideConfiguration; +} diff --git a/src/GitVersion.App/Program.cs b/src/GitVersion.App/Program.cs index 373bce10af..9984539bc6 100644 --- a/src/GitVersion.App/Program.cs +++ b/src/GitVersion.App/Program.cs @@ -1,4 +1,7 @@ +using GitVersion.Agents; +using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Output; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; @@ -23,6 +26,9 @@ private IHostBuilder CreateHostBuilder(string[] args) => { services.AddModule(new GitVersionCoreModule()); services.AddModule(new GitVersionLibGit2SharpModule()); + services.AddModule(new GitVersionBuildAgentsModule()); + services.AddModule(new GitVersionConfigurationModule()); + services.AddModule(new GitVersionOutputModule()); services.AddModule(new GitVersionAppModule()); services.AddSingleton(sp => diff --git a/src/GitVersion.App/PublicAPI.Shipped.txt b/src/GitVersion.App/PublicAPI.Shipped.txt index 8c88bf07ad..7dc5c58110 100644 --- a/src/GitVersion.App/PublicAPI.Shipped.txt +++ b/src/GitVersion.App/PublicAPI.Shipped.txt @@ -1,68 +1 @@ #nullable enable -GitVersion.ArgumentParser -GitVersion.ArgumentParser.ArgumentParser(GitVersion.IEnvironment! environment, GitVersion.BuildAgents.ICurrentBuildAgent! buildAgent, GitVersion.Logging.IConsole! console, GitVersion.IGlobbingResolver! globbingResolver) -> void -GitVersion.ArgumentParser.ParseArguments(string! commandLineArguments) -> GitVersion.Arguments! -GitVersion.ArgumentParser.ParseArguments(string![]! commandLineArguments) -> GitVersion.Arguments! -GitVersion.Arguments -GitVersion.Arguments.Arguments() -> void -GitVersion.Arguments.Authentication -> GitVersion.AuthenticationInfo! -GitVersion.Arguments.ClonePath -> string? -GitVersion.Arguments.CommitId -> string? -GitVersion.Arguments.ConfigFile -> string? -GitVersion.Arguments.Diag -> bool -GitVersion.Arguments.EnsureAssemblyInfo -> bool -GitVersion.Arguments.Init -> bool -GitVersion.Arguments.IsHelp -> bool -GitVersion.Arguments.IsVersion -> bool -GitVersion.Arguments.LogFilePath -> string? -GitVersion.Arguments.NoCache -> bool -GitVersion.Arguments.NoFetch -> bool -GitVersion.Arguments.NoNormalize -> bool -GitVersion.Arguments.Output -> System.Collections.Generic.ISet! -GitVersion.Arguments.OutputFile -> string? -GitVersion.Arguments.OverrideConfig -> GitVersion.Model.Configuration.Config? -GitVersion.Arguments.ShowConfig -> bool -GitVersion.Arguments.ShowVariable -> string? -GitVersion.Arguments.TargetBranch -> string? -GitVersion.Arguments.TargetPath -> string? -GitVersion.Arguments.TargetUrl -> string? -GitVersion.Arguments.ToOptions() -> GitVersion.GitVersionOptions! -GitVersion.Arguments.UpdateAssemblyInfo -> bool -GitVersion.Arguments.UpdateAssemblyInfoFileName -> System.Collections.Generic.ISet! -GitVersion.Arguments.UpdateProjectFiles -> bool -GitVersion.Arguments.UpdateWixVersionFile -> bool -GitVersion.Arguments.Verbosity -> GitVersion.Logging.Verbosity -GitVersion.GitVersionAppModule -GitVersion.GitVersionAppModule.GitVersionAppModule() -> void -GitVersion.GitVersionAppModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.GitVersionExecutor -GitVersion.GitVersionExecutor.Execute(GitVersion.GitVersionOptions! gitVersionOptions) -> int -GitVersion.GitVersionExecutor.GitVersionExecutor(GitVersion.Logging.ILog! log, GitVersion.Logging.IConsole! console, GitVersion.Configuration.IConfigFileLocator! configFileLocator, GitVersion.Configuration.IConfigProvider! configProvider, GitVersion.IGitVersionCalculateTool! gitVersionCalculateTool, GitVersion.IGitVersionOutputTool! gitVersionOutputTool, GitVersion.IVersionWriter! versionWriter, GitVersion.IHelpWriter! helpWriter, GitVersion.IGitRepositoryInfo! repositoryInfo) -> void -GitVersion.GlobbingResolver -GitVersion.GlobbingResolver.GlobbingResolver() -> void -GitVersion.GlobbingResolver.Resolve(string! workingDirectory, string! pattern) -> System.Collections.Generic.IEnumerable! -GitVersion.HelpWriter -GitVersion.HelpWriter.HelpWriter(GitVersion.IVersionWriter! versionWriter, GitVersion.Logging.IConsole! console) -> void -GitVersion.HelpWriter.Write() -> void -GitVersion.HelpWriter.WriteTo(System.Action! writeAction) -> void -GitVersion.IArgumentParser -GitVersion.IArgumentParser.ParseArguments(string! commandLineArguments) -> GitVersion.Arguments! -GitVersion.IArgumentParser.ParseArguments(string![]! commandLineArguments) -> GitVersion.Arguments! -GitVersion.IGitVersionExecutor -GitVersion.IGitVersionExecutor.Execute(GitVersion.GitVersionOptions! gitVersionOptions) -> int -GitVersion.IGlobbingResolver -GitVersion.IGlobbingResolver.Resolve(string! workingDirectory, string! pattern) -> System.Collections.Generic.IEnumerable! -GitVersion.IHelpWriter -GitVersion.IHelpWriter.Write() -> void -GitVersion.IHelpWriter.WriteTo(System.Action! writeAction) -> void -GitVersion.IVersionWriter -GitVersion.IVersionWriter.Write(System.Reflection.Assembly! assembly) -> void -GitVersion.IVersionWriter.WriteTo(System.Reflection.Assembly! assembly, System.Action! writeAction) -> void -GitVersion.QuotedStringHelpers -GitVersion.VersionWriter -GitVersion.VersionWriter.VersionWriter(GitVersion.Logging.IConsole! console) -> void -GitVersion.VersionWriter.Write(System.Reflection.Assembly! assembly) -> void -GitVersion.VersionWriter.WriteTo(System.Reflection.Assembly! assembly, System.Action! writeAction) -> void -static GitVersion.QuotedStringHelpers.SplitUnquoted(string? input, char splitChar) -> string![]! -static GitVersion.QuotedStringHelpers.UnquoteText(string! input) -> string! -virtual GitVersion.GlobbingResolver.GetDirectoryInfoWrapper(string! workingDirectory) -> Microsoft.Extensions.FileSystemGlobbing.Abstractions.DirectoryInfoBase! diff --git a/src/GitVersion.App/PublicAPI.Unshipped.txt b/src/GitVersion.App/PublicAPI.Unshipped.txt index e69de29bb2..7dc5c58110 100644 --- a/src/GitVersion.App/PublicAPI.Unshipped.txt +++ b/src/GitVersion.App/PublicAPI.Unshipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/GitVersion.App/QuotedStringHelpers.cs b/src/GitVersion.App/QuotedStringHelpers.cs index 15a1c7fa8f..15fcd174d6 100644 --- a/src/GitVersion.App/QuotedStringHelpers.cs +++ b/src/GitVersion.App/QuotedStringHelpers.cs @@ -2,7 +2,7 @@ namespace GitVersion; -public static class QuotedStringHelpers +internal static class QuotedStringHelpers { /// /// Splits input string based on split-character, ignoring split-character in @@ -23,7 +23,7 @@ public static class QuotedStringHelpers public static string[] SplitUnquoted(string? input, char splitChar) { if (input == null) - return Array.Empty(); + return []; var split = new List(); bool isPreviousCharBackslash = false; @@ -50,7 +50,7 @@ public static string[] SplitUnquoted(string? input, char splitChar) isPreviousCharBackslash = current == '\\'; } - split.Add(input.Substring(startIndex, input.Length - startIndex)); + split.Add(input[startIndex..]); return split.Where(argument => !argument.IsNullOrEmpty()).ToArray(); } @@ -71,7 +71,7 @@ public static string UnquoteText(string input) if (sb[0] == '"') sb.Remove(0, 1); - if (sb[sb.Length - 1] == '"' && sb[sb.Length - 2] != '\\') + if (sb[^1] == '"' && sb[^2] != '\\') sb.Remove(sb.Length - 1, 1); sb.Replace("\\\"", "\""); // unescape quotes. diff --git a/src/GitVersion.App/VersionWriter.cs b/src/GitVersion.App/VersionWriter.cs index a15889b9ad..41f5140d62 100644 --- a/src/GitVersion.App/VersionWriter.cs +++ b/src/GitVersion.App/VersionWriter.cs @@ -3,11 +3,10 @@ namespace GitVersion; -public class VersionWriter : IVersionWriter +internal class VersionWriter(IConsole console) : IVersionWriter { - private readonly IConsole console; + private readonly IConsole console = console.NotNull(); - public VersionWriter(IConsole console) => this.console = console.NotNull(); public void Write(Assembly assembly) => WriteTo(assembly, this.console.WriteLine); public void WriteTo(Assembly assembly, Action writeAction) diff --git a/src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/AzurePipelinesTests.cs similarity index 88% rename from src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/AzurePipelinesTests.cs index d14d9ec83c..025cbb5c5f 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/AzurePipelinesTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/AzurePipelinesTests.cs @@ -1,10 +1,7 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class AzurePipelinesTests : TestBase @@ -31,7 +28,7 @@ public void SetEnvironmentVariableForTest() [Test] public void DevelopBranch() { - var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Unstable4"); + var vars = new TestableGitVersionVariables { FullSemVer = "0.0.0-Unstable4" }; var vsVersion = this.buildServer.GenerateSetVersionMessage(vars); vsVersion.ShouldBe("##vso[build.updatebuildnumber]Some Build_Value 0.0.0-Unstable4 20151310.3 $(UnknownVar) Release"); @@ -52,7 +49,7 @@ public void MissingEnvShouldNotBlowUp() this.environment.SetEnvironmentVariable(key, null); const string semver = "0.0.0-Unstable4"; - var vars = new TestableVersionVariables(fullSemVer: semver); + var vars = new TestableGitVersionVariables { FullSemVer = semver }; var vsVersion = this.buildServer.GenerateSetVersionMessage(vars); vsVersion.ShouldBe(semver); } @@ -64,7 +61,7 @@ public void MissingEnvShouldNotBlowUp() public void AzurePipelinesBuildNumberWithFullSemVer(string buildNumberFormat, string myFullSemVer, string expectedBuildNumber) { this.environment.SetEnvironmentVariable(key, buildNumberFormat); - var vars = new TestableVersionVariables(fullSemVer: myFullSemVer); + var vars = new TestableGitVersionVariables { FullSemVer = myFullSemVer }; var logMessage = this.buildServer.GenerateSetVersionMessage(vars); logMessage.ShouldBe(logPrefix + expectedBuildNumber); } @@ -76,7 +73,7 @@ public void AzurePipelinesBuildNumberWithFullSemVer(string buildNumberFormat, st public void AzurePipelinesBuildNumberWithSemVer(string buildNumberFormat, string mySemVer, string expectedBuildNumber) { this.environment.SetEnvironmentVariable(key, buildNumberFormat); - var vars = new TestableVersionVariables(semVer: mySemVer); + var vars = new TestableGitVersionVariables { SemVer = mySemVer }; var logMessage = this.buildServer.GenerateSetVersionMessage(vars); logMessage.ShouldBe(logPrefix + expectedBuildNumber); } diff --git a/src/GitVersion.Core.Tests/BuildAgents/BitBucketPipelinesTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/BitBucketPipelinesTests.cs similarity index 71% rename from src/GitVersion.Core.Tests/BuildAgents/BitBucketPipelinesTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/BitBucketPipelinesTests.cs index ecd5218fa0..3cae60d9ad 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/BitBucketPipelinesTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/BitBucketPipelinesTests.cs @@ -1,12 +1,10 @@ -using GitVersion.BuildAgents; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class BitBucketPipelinesTests : TestBase @@ -19,13 +17,12 @@ public class BitBucketPipelinesTests : TestBase public void SetEnvironmentVariableForTest() { this.sp = ConfigureServices(services => services.AddSingleton()); - this.environment = sp.GetRequiredService(); - this.buildServer = sp.GetRequiredService(); + this.environment = this.sp.GetRequiredService(); + this.buildServer = this.sp.GetRequiredService(); this.environment.SetEnvironmentVariable(BitBucketPipelines.EnvironmentVariableName, "MyWorkspace"); } - [Test] public void CanNotApplyToCurrentContextWhenEnvironmentVariableNotSet() { @@ -45,7 +42,7 @@ public void CalculateVersionOnMainBranch() // Arrange this.environment.SetEnvironmentVariable(BitBucketPipelines.BranchEnvironmentVariableName, "refs/heads/main"); - var vars = new TestableVersionVariables(fullSemVer: "1.2.3"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.2.3" }; var vsVersion = this.buildServer.GenerateSetVersionMessage(vars); vsVersion.ShouldBe("1.2.3"); @@ -57,7 +54,7 @@ public void CalculateVersionOnDevelopBranch() // Arrange this.environment.SetEnvironmentVariable(BitBucketPipelines.BranchEnvironmentVariableName, "refs/heads/develop"); - var vars = new TestableVersionVariables(fullSemVer: "1.2.3-unstable.4"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.2.3-unstable.4" }; var vsVersion = this.buildServer.GenerateSetVersionMessage(vars); vsVersion.ShouldBe("1.2.3-unstable.4"); @@ -69,7 +66,7 @@ public void CalculateVersionOnFeatureBranch() // Arrange this.environment.SetEnvironmentVariable(BitBucketPipelines.BranchEnvironmentVariableName, "refs/heads/feature/my-work"); - var vars = new TestableVersionVariables(fullSemVer: "1.2.3-beta.4"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.2.3-beta.4" }; var vsVersion = this.buildServer.GenerateSetVersionMessage(vars); vsVersion.ShouldBe("1.2.3-beta.4"); @@ -85,7 +82,7 @@ public void GetCurrentBranchShouldHandleBranches() var result = this.buildServer.GetCurrentBranch(false); // Assert - result.ShouldBe($"refs/heads/feature/my-work"); + result.ShouldBe("refs/heads/feature/my-work"); } [Test] @@ -117,25 +114,26 @@ public void GetCurrentBranchShouldHandlePullRequests() result.ShouldBeNull(); } - [Test] public void WriteAllVariablesToTheTextWriter() { var assemblyLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); assemblyLocation.ShouldNotBeNull(); - var f = PathHelper.Combine(assemblyLocation, "gitversion.properties"); + var propertyFile = PathHelper.Combine(assemblyLocation, "gitversion.properties"); + var ps1File = PathHelper.Combine(assemblyLocation, "gitversion.ps1"); try { - AssertVariablesAreWrittenToFile(f); + AssertVariablesAreWrittenToFile(propertyFile, ps1File); } finally { - File.Delete(f); + File.Delete(propertyFile); + File.Delete(ps1File); } } - private void AssertVariablesAreWrittenToFile(string file) + private void AssertVariablesAreWrittenToFile(string propertyFile, string ps1File) { var writes = new List(); var semanticVersion = new SemanticVersion @@ -144,30 +142,36 @@ private void AssertVariablesAreWrittenToFile(string file) Minor = 2, Patch = 3, PreReleaseTag = "beta1", - BuildMetaData = "5" + BuildMetaData = new SemanticVersionBuildMetaData("5") { Sha = "f28807e615e9f06aec8a33c87780374e0c1f6fb8", CommitDate = new DateTimeOffset(2022, 4, 6, 16, 10, 59, TimeSpan.FromHours(10)) } }; - semanticVersion.BuildMetaData.CommitDate = new DateTimeOffset(2022, 4, 6, 16, 10, 59, TimeSpan.FromHours(10)); - semanticVersion.BuildMetaData.Sha = "f28807e615e9f06aec8a33c87780374e0c1f6fb8"; - - var config = new TestEffectiveConfiguration(); var variableProvider = this.sp.GetRequiredService(); - var variables = variableProvider.GetVariablesFor(semanticVersion, config, false); + var variables = variableProvider.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); - this.buildServer.WithPropertyFile(file); + this.buildServer.WithPropertyFile(propertyFile); + this.buildServer.WithPowershellFile(ps1File); this.buildServer.WriteIntegration(writes.Add, variables); writes[1].ShouldBe("1.2.3-beta.1+5"); - File.Exists(file).ShouldBe(true); + File.Exists(propertyFile).ShouldBe(true); - var props = File.ReadAllText(file); + var props = File.ReadAllText(propertyFile); props.ShouldContain("export GITVERSION_MAJOR=1"); props.ShouldContain("export GITVERSION_MINOR=2"); props.ShouldContain("export GITVERSION_SHA=f28807e615e9f06aec8a33c87780374e0c1f6fb8"); props.ShouldContain("export GITVERSION_COMMITDATE=2022-04-06"); + + File.Exists(ps1File).ShouldBe(true); + + var psProps = File.ReadAllText(ps1File); + + psProps.ShouldContain("$GITVERSION_MAJOR = \"1\""); + psProps.ShouldContain("$GITVERSION_MINOR = \"2\""); + psProps.ShouldContain("$GITVERSION_SHA = \"f28807e615e9f06aec8a33c87780374e0c1f6fb8\""); + psProps.ShouldContain("$GITVERSION_COMMITDATE = \"2022-04-06\""); } } diff --git a/src/GitVersion.Core.Tests/BuildAgents/BuildKiteTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/BuildKiteTests.cs similarity index 93% rename from src/GitVersion.Core.Tests/BuildAgents/BuildKiteTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/BuildKiteTests.cs index 4bbd4541fb..3cb40d44ec 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/BuildKiteTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/BuildKiteTests.cs @@ -1,10 +1,7 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class BuildKiteTests : TestBase @@ -89,7 +86,7 @@ public void GetSetParameterMessageShouldReturnEmptyArray() public void GetEmptyGenerateSetVersionMessage() { // Arrange - var vars = new TestableVersionVariables("1.0.0"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.0.0" }; // Act var message = this.buildServer.GenerateSetVersionMessage(vars); diff --git a/src/GitVersion.Core.Tests/BuildAgents/BuildServerBaseTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/BuildServerBaseTests.cs similarity index 67% rename from src/GitVersion.Core.Tests/BuildAgents/BuildServerBaseTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/BuildServerBaseTests.cs index ceacebd38b..9666ef0e79 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/BuildServerBaseTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/BuildServerBaseTests.cs @@ -1,13 +1,11 @@ -using GitVersion.BuildAgents; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Logging; using GitVersion.OutputVariables; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class BuildServerBaseTests : TestBase @@ -32,37 +30,32 @@ public void BuildNumberIsFullSemVer() Minor = 2, Patch = 3, PreReleaseTag = "beta1", - BuildMetaData = "5" + BuildMetaData = new SemanticVersionBuildMetaData("5") + { + Sha = "commitSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semanticVersion.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - semanticVersion.BuildMetaData.Sha = "commitSha"; - - var config = new TestEffectiveConfiguration(); - - var variables = this.buildServer.GetVariablesFor(semanticVersion, config, false); + var variables = this.buildServer.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); var buildAgent = this.sp.GetRequiredService(); buildAgent.WriteIntegration(writes.Add, variables); writes[1].ShouldBe("1.2.3-beta.1+5"); - writes = new List(); + writes = []; buildAgent.WriteIntegration(writes.Add, variables, false); writes.ShouldNotContain(x => x != null && x.StartsWith("Executing GenerateSetVersionMessage for ")); } - private class BuildAgent : BuildAgentBase + private class BuildAgent(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { protected override string EnvironmentVariable => throw new NotImplementedException(); - public BuildAgent(IEnvironment environment, ILog log) : base(environment, log) - { - } - public override bool CanApplyToCurrentContext() => throw new NotImplementedException(); - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string[] GenerateSetParameterMessage(string name, string value) => Array.Empty(); + public override string[] GenerateSetParameterMessage(string name, string? value) => []; } } diff --git a/src/GitVersion.Core.Tests/BuildAgents/CodeBuildTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/CodeBuildTests.cs similarity index 88% rename from src/GitVersion.Core.Tests/BuildAgents/CodeBuildTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/CodeBuildTests.cs index b81e4f1e91..cdc5de2b10 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/CodeBuildTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/CodeBuildTests.cs @@ -1,12 +1,10 @@ -using GitVersion.BuildAgents; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public sealed class CodeBuildTests : TestBase @@ -77,17 +75,16 @@ private void AssertVariablesAreWrittenToFile(string file) Minor = 2, Patch = 3, PreReleaseTag = "beta1", - BuildMetaData = "5" + BuildMetaData = new SemanticVersionBuildMetaData("5") + { + Sha = "commitSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semanticVersion.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - semanticVersion.BuildMetaData.Sha = "commitSha"; - - var config = new TestEffectiveConfiguration(); - var variableProvider = this.sp.GetRequiredService(); - var variables = variableProvider.GetVariablesFor(semanticVersion, config, false); + var variables = variableProvider.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); this.buildServer.WithPropertyFile(file); diff --git a/src/GitVersion.Core.Tests/BuildAgents/ContinuaCiTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/ContinuaCiTests.cs similarity index 64% rename from src/GitVersion.Core.Tests/BuildAgents/ContinuaCiTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/ContinuaCiTests.cs index 5b9f177eb2..45f4882ea6 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/ContinuaCiTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/ContinuaCiTests.cs @@ -1,9 +1,7 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class ContinuaCiTests : TestBase @@ -17,8 +15,8 @@ public class ContinuaCiTests : TestBase public void GenerateBuildVersion() { var buildServer = this.sp.GetRequiredService(); - var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Beta4.7"); + var vars = new TestableGitVersionVariables { FullSemVer = "0.0.0-Beta4.7" }; var continuaCiVersion = buildServer.GenerateSetVersionMessage(vars); - Assert.AreEqual("@@continua[setBuildVersion value='0.0.0-Beta4.7']", continuaCiVersion); + Assert.That(continuaCiVersion, Is.EqualTo("@@continua[setBuildVersion value='0.0.0-Beta4.7']")); } } diff --git a/src/GitVersion.Core.Tests/BuildAgents/DroneTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/DroneTests.cs similarity index 97% rename from src/GitVersion.Core.Tests/BuildAgents/DroneTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/DroneTests.cs index be4181fb3c..4e65698cca 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/DroneTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/DroneTests.cs @@ -1,10 +1,7 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class DroneTests : TestBase diff --git a/src/GitVersion.Core.Tests/BuildAgents/EnvRunTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/EnvRunTests.cs similarity index 85% rename from src/GitVersion.Core.Tests/BuildAgents/EnvRunTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/EnvRunTests.cs index 73ae7dcbdc..34aba8ec1b 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/EnvRunTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/EnvRunTests.cs @@ -1,11 +1,8 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class EnvRunTests : TestBase @@ -23,7 +20,7 @@ public void SetEnvironmentVariableForTest() this.buildServer = sp.GetRequiredService(); // set environment variable and create an empty envrun file to indicate that EnvRun is running... - this.mFilePath = PathHelper.Combine(Path.GetTempPath(), "envrun.db"); + this.mFilePath = PathHelper.Combine(PathHelper.GetTempPath(), "envrun.db"); this.environment.SetEnvironmentVariable(EnvVarName, this.mFilePath); File.OpenWrite(this.mFilePath).Dispose(); } @@ -54,14 +51,14 @@ public void CanApplyToCurrentContextEnvironmentVariableNotSet() [TestCase("1.2.3-rc4")] public void GenerateSetVersionMessage(string fullSemVer) { - var vars = new TestableVersionVariables(fullSemVer: fullSemVer); + var vars = new TestableGitVersionVariables { FullSemVer = fullSemVer }; var version = this.buildServer.GenerateSetVersionMessage(vars); version.ShouldBe(fullSemVer); } [TestCase("Version", "1.2.3", "@@envrun[set name='GitVersion_Version' value='1.2.3']")] [TestCase("Version", "1.2.3-rc4", "@@envrun[set name='GitVersion_Version' value='1.2.3-rc4']")] - public void GenerateSetParameterMessage(string name, string value, string expected) + public void GenerateSetParameterMessage(string name, string? value, string expected) { var output = this.buildServer.GenerateSetParameterMessage(name, value); output.ShouldHaveSingleItem(); diff --git a/src/GitVersion.Core.Tests/BuildAgents/GitHubActionsTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/GitHubActionsTests.cs similarity index 83% rename from src/GitVersion.Core.Tests/BuildAgents/GitHubActionsTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/GitHubActionsTests.cs index f4fbc1b621..b5fd21fd0f 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/GitHubActionsTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/GitHubActionsTests.cs @@ -1,10 +1,8 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; +using GitVersion.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class GitHubActionsTests : TestBase @@ -20,6 +18,7 @@ public void SetUp() this.environment = sp.GetRequiredService(); this.buildServer = sp.GetRequiredService(); this.environment.SetEnvironmentVariable(GitHubActions.EnvironmentVariableName, "true"); + this.environment.SetEnvironmentVariable("GITHUB_REF_TYPE", "branch"); this.githubSetEnvironmentTempFilePath = Path.GetTempFileName(); this.environment.SetEnvironmentVariable(GitHubActions.GitHubSetEnvTempFileEnvironmentVariableName, this.githubSetEnvironmentTempFilePath); @@ -77,13 +76,14 @@ public void GetCurrentBranchShouldHandleBranches() public void GetCurrentBranchShouldHandleTags() { // Arrange + this.environment.SetEnvironmentVariable("GITHUB_REF_TYPE", "tag"); this.environment.SetEnvironmentVariable("GITHUB_REF", "refs/tags/1.0.0"); // Act var result = this.buildServer.GetCurrentBranch(false); // Assert - result.ShouldBe("refs/tags/1.0.0"); + result.ShouldBeNull(); } [Test] @@ -109,7 +109,7 @@ public void GetSetParameterMessage() var result = this.buildServer.GenerateSetParameterMessage("GitVersion_Something", "1.0.0"); // Assert - result.ShouldContain(s => true, 0); + result.ShouldContain(_ => true, 0); } [Test] @@ -126,7 +126,7 @@ public void SkipEmptySetParameterMessage() public void ShouldWriteIntegration() { // Arrange - var vars = new TestableVersionVariables("1.0.0"); + var vars = new TestableGitVersionVariables { Major = "1.0.0" }; var list = new List(); @@ -137,21 +137,12 @@ public void ShouldWriteIntegration() this.buildServer.WriteIntegration(s => list.Add(s), vars); // Assert - var expected = new List - { - "Executing GenerateSetVersionMessage for 'GitHubActions'.", - "", - "Executing GenerateBuildLogOutput for 'GitHubActions'.", - "Writing version variables to $GITHUB_ENV file for 'GitHubActions'." - }; - - string.Join(System.Environment.NewLine, list) - .ShouldBe(string.Join(System.Environment.NewLine, expected)); - - var expectedFileContents = new List - { - "GitVersion_Major=1.0.0" - }; + var expected = new List { "Executing GenerateSetVersionMessage for 'GitHubActions'.", "", "Executing GenerateBuildLogOutput for 'GitHubActions'.", "Writing version variables to $GITHUB_ENV file for 'GitHubActions'." }; + + string.Join(PathHelper.NewLine, list) + .ShouldBe(string.Join(PathHelper.NewLine, expected)); + + var expectedFileContents = new List { "GitVersion_Major=1.0.0" }; this.githubSetEnvironmentTempFilePath.ShouldNotBeNull(); var actualFileContents = File.ReadAllLines(this.githubSetEnvironmentTempFilePath); @@ -163,7 +154,7 @@ public void ShouldWriteIntegration() public void ShouldNotWriteIntegration() { // Arrange - var vars = new TestableVersionVariables("1.0.0"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.0.0" }; var list = new List(); @@ -180,7 +171,7 @@ public void ShouldNotWriteIntegration() public void GetEmptyGenerateSetVersionMessage() { // Arrange - var vars = new TestableVersionVariables("1.0.0"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.0.0" }; // Act var message = this.buildServer.GenerateSetVersionMessage(vars); diff --git a/src/GitVersion.Core.Tests/BuildAgents/GitLabCiTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/GitLabCiTests.cs similarity index 82% rename from src/GitVersion.Core.Tests/BuildAgents/GitLabCiTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/GitLabCiTests.cs index 18f9809406..aa1e2ec6b0 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/GitLabCiTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/GitLabCiTests.cs @@ -1,12 +1,10 @@ -using GitVersion.BuildAgents; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class GitLabCiTests : TestBase @@ -24,7 +22,7 @@ public void SetUp() [Test] public void GenerateSetVersionMessageReturnsVersionAsIsAlthoughThisIsNotUsedByJenkins() { - var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Beta4.7"); + var vars = new TestableGitVersionVariables { FullSemVer = "0.0.0-Beta4.7" }; this.buildServer.GenerateSetVersionMessage(vars).ShouldBe("0.0.0-Beta4.7"); } @@ -62,16 +60,16 @@ private void AssertVariablesAreWrittenToFile(string file) Minor = 2, Patch = 3, PreReleaseTag = "beta1", - BuildMetaData = "5" + BuildMetaData = new SemanticVersionBuildMetaData("5") + { + Sha = "commitSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semanticVersion.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - semanticVersion.BuildMetaData.Sha = "commitSha"; - - var config = new TestEffectiveConfiguration(); var variableProvider = this.sp.GetRequiredService(); - var variables = variableProvider.GetVariablesFor(semanticVersion, config, false); + var variables = variableProvider.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); this.buildServer.WithPropertyFile(file); diff --git a/src/GitVersion.Core.Tests/BuildAgents/JenkinsTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/JenkinsTests.cs similarity index 92% rename from src/GitVersion.Core.Tests/BuildAgents/JenkinsTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/JenkinsTests.cs index 896b9aacab..12ab86d632 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/JenkinsTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/JenkinsTests.cs @@ -1,12 +1,10 @@ -using GitVersion.BuildAgents; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class JenkinsTests : TestBase @@ -95,7 +93,7 @@ public void JenkinsTakesBranchNameInPipelineAsCode() [Test] public void GenerateSetVersionMessageReturnsVersionAsIsAlthoughThisIsNotUsedByJenkins() { - var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Beta4.7"); + var vars = new TestableGitVersionVariables { FullSemVer = "0.0.0-Beta4.7" }; this.buildServer.GenerateSetVersionMessage(vars).ShouldBe("0.0.0-Beta4.7"); } @@ -133,17 +131,12 @@ private void AssertVariablesAreWrittenToFile(string file) Minor = 2, Patch = 3, PreReleaseTag = "beta1", - BuildMetaData = "5" + BuildMetaData = new SemanticVersionBuildMetaData("5") { Sha = "commitSha", CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") } }; - semanticVersion.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - semanticVersion.BuildMetaData.Sha = "commitSha"; - - var config = new TestEffectiveConfiguration(); - var variableProvider = this.sp.GetRequiredService(); - var variables = variableProvider.GetVariablesFor(semanticVersion, config, false); + var variables = variableProvider.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); this.buildServer.WithPropertyFile(file); diff --git a/src/GitVersion.Core.Tests/BuildAgents/MyGetTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/MyGetTests.cs similarity index 61% rename from src/GitVersion.Core.Tests/BuildAgents/MyGetTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/MyGetTests.cs index 7c0fd58948..73eb8fb787 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/MyGetTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/MyGetTests.cs @@ -1,9 +1,7 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class MyGetTests : TestBase @@ -20,22 +18,22 @@ public void SetUp() [Test] public void DevelopBranch() { - var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Unstable4"); + var vars = new TestableGitVersionVariables { FullSemVer = "0.0.0-Unstable4" }; var message = this.buildServer.GenerateSetVersionMessage(vars); - Assert.AreEqual(null, message); + Assert.That(message, Is.EqualTo(null)); } [Test] public void EscapeValues() { var message = this.buildServer.GenerateSetParameterMessage("Foo", "0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); - Assert.AreEqual("##myget[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", message[0]); + Assert.That(message[0], Is.EqualTo("##myget[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']")); } [Test] public void BuildNumber() { - var message = this.buildServer.GenerateSetParameterMessage("LegacySemVerPadded", "0.8.0-unstable568"); - Assert.AreEqual("##myget[buildNumber '0.8.0-unstable568']", message[1]); + var message = this.buildServer.GenerateSetParameterMessage("SemVer", "0.8.0-unstable568"); + Assert.That(message[1], Is.EqualTo("##myget[buildNumber '0.8.0-unstable568']")); } } diff --git a/src/GitVersion.Core.Tests/BuildAgents/SpaceAutomationTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/SpaceAutomationTests.cs similarity index 93% rename from src/GitVersion.Core.Tests/BuildAgents/SpaceAutomationTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/SpaceAutomationTests.cs index f4160a9154..9afdb28362 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/SpaceAutomationTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/SpaceAutomationTests.cs @@ -1,11 +1,7 @@ -using GitVersion; -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; -namespace GitVersionCore.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class SpaceAutomationTests : TestBase @@ -91,7 +87,7 @@ public void GetCurrentBranchShouldHandlePullRequests() public void GetEmptyGenerateSetVersionMessage() { // Arrange - var vars = new TestableVersionVariables("1.0.0"); + var vars = new TestableGitVersionVariables { FullSemVer = "1.0.0" }; // Act var message = this.buildServer.GenerateSetVersionMessage(vars); diff --git a/src/GitVersion.Core.Tests/BuildAgents/TeamCityTests.cs b/src/GitVersion.BuildAgents.Tests/Agents/TeamCityTests.cs similarity index 52% rename from src/GitVersion.Core.Tests/BuildAgents/TeamCityTests.cs rename to src/GitVersion.BuildAgents.Tests/Agents/TeamCityTests.cs index 92151edc47..f2364e3aaf 100644 --- a/src/GitVersion.Core.Tests/BuildAgents/TeamCityTests.cs +++ b/src/GitVersion.BuildAgents.Tests/Agents/TeamCityTests.cs @@ -1,9 +1,7 @@ -using GitVersion.BuildAgents; using GitVersion.Core.Tests.Helpers; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -namespace GitVersion.Core.Tests.BuildAgents; +namespace GitVersion.Agents.Tests; [TestFixture] public class TeamCityTests : TestBase @@ -20,16 +18,19 @@ public void SetUp() [Test] public void DevelopBranch() { - var vars = new TestableVersionVariables(fullSemVer: "0.0.0-Unstable4"); + var vars = new TestableGitVersionVariables { FullSemVer = "0.0.0-Unstable4" }; var tcVersion = this.buildServer.GenerateSetVersionMessage(vars); - Assert.AreEqual("##teamcity[buildNumber '0.0.0-Unstable4']", tcVersion); + Assert.That(tcVersion, Is.EqualTo("##teamcity[buildNumber '0.0.0-Unstable4']")); } [Test] public void EscapeValues() { var tcVersion = this.buildServer.GenerateSetParameterMessage("Foo", "0.8.0-unstable568 Branch:'develop' Sha:'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb'"); - Assert.AreEqual("##teamcity[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", tcVersion[0]); - Assert.AreEqual("##teamcity[setParameter name='system.GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']", tcVersion[1]); + Assert.Multiple(() => + { + Assert.That(tcVersion[0], Is.EqualTo("##teamcity[setParameter name='GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']")); + Assert.That(tcVersion[1], Is.EqualTo("##teamcity[setParameter name='system.GitVersion.Foo' value='0.8.0-unstable568 Branch:|'develop|' Sha:|'ee69bff1087ebc95c6b43aa2124bd58f5722e0cb|'']")); + }); } } diff --git a/src/GitVersion.BuildAgents.Tests/AssemblyParallelizable.cs b/src/GitVersion.BuildAgents.Tests/AssemblyParallelizable.cs new file mode 100644 index 0000000000..fdd365b7e2 --- /dev/null +++ b/src/GitVersion.BuildAgents.Tests/AssemblyParallelizable.cs @@ -0,0 +1 @@ +[assembly: Parallelizable(ParallelScope.Fixtures)] diff --git a/src/GitVersion.BuildAgents.Tests/GitVersion.BuildAgents.Tests.csproj b/src/GitVersion.BuildAgents.Tests/GitVersion.BuildAgents.Tests.csproj new file mode 100644 index 0000000000..b7253b713e --- /dev/null +++ b/src/GitVersion.BuildAgents.Tests/GitVersion.BuildAgents.Tests.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/GitVersion.Core/BuildAgents/AppVeyor.cs b/src/GitVersion.BuildAgents/Agents/AppVeyor.cs similarity index 88% rename from src/GitVersion.Core/BuildAgents/AppVeyor.cs rename to src/GitVersion.BuildAgents/Agents/AppVeyor.cs index 0fbac0430e..580b9adc29 100644 --- a/src/GitVersion.Core/BuildAgents/AppVeyor.cs +++ b/src/GitVersion.BuildAgents/Agents/AppVeyor.cs @@ -1,21 +1,16 @@ -using System.Text.Json; using GitVersion.Extensions; using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class AppVeyor : BuildAgentBase +internal class AppVeyor(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public AppVeyor(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "APPVEYOR"; protected override string EnvironmentVariable => EnvironmentVariableName; - public override string GenerateSetVersionMessage(VersionVariables variables) + public override string GenerateSetVersionMessage(GitVersionVariables variables) { var buildNumber = Environment.GetEnvironmentVariable("APPVEYOR_BUILD_NUMBER"); var apiUrl = Environment.GetEnvironmentVariable("APPVEYOR_API_URL") ?? throw new Exception("APPVEYOR_API_URL environment variable not set"); @@ -42,7 +37,7 @@ public override string GenerateSetVersionMessage(VersionVariables variables) return $"Set AppVeyor build number to '{variables.FullSemVer}'."; } - public override string[] GenerateSetParameterMessage(string name, string value) + public override string[] GenerateSetParameterMessage(string name, string? value) { var apiUrl = Environment.GetEnvironmentVariable("APPVEYOR_API_URL") ?? throw new Exception("APPVEYOR_API_URL environment variable not set"); var httpClient = GetHttpClient(apiUrl); @@ -57,10 +52,10 @@ public override string[] GenerateSetParameterMessage(string name, string value) var response = httpClient.PostAsync("api/build/variables", stringContent).GetAwaiter().GetResult(); response.EnsureSuccessStatusCode(); - return new[] - { + return + [ $"Adding Environment Variable. name='GitVersion_{name}' value='{value}']" - }; + ]; } private static HttpClient GetHttpClient(string apiUrl) => new() diff --git a/src/GitVersion.Core/BuildAgents/AzurePipelines.cs b/src/GitVersion.BuildAgents/Agents/AzurePipelines.cs similarity index 66% rename from src/GitVersion.Core/BuildAgents/AzurePipelines.cs rename to src/GitVersion.BuildAgents/Agents/AzurePipelines.cs index 30e08ee059..0978007fde 100644 --- a/src/GitVersion.Core/BuildAgents/AzurePipelines.cs +++ b/src/GitVersion.BuildAgents/Agents/AzurePipelines.cs @@ -3,29 +3,26 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class AzurePipelines : BuildAgentBase +internal class AzurePipelines(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public AzurePipelines(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "TF_BUILD"; protected override string EnvironmentVariable => EnvironmentVariableName; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"##vso[task.setvariable variable=GitVersion.{name}]{value}", $"##vso[task.setvariable variable=GitVersion.{name};isOutput=true]{value}" - }; + ]; - public override string? GetCurrentBranch(bool usingDynamicRepos) => Environment.GetEnvironmentVariable("BUILD_SOURCEBRANCH"); + public override string? GetCurrentBranch(bool usingDynamicRepos) => Environment.GetEnvironmentVariable("GIT_BRANCH") + ?? Environment.GetEnvironmentVariable("BUILD_SOURCEBRANCH"); public override bool PreventFetch() => true; - public override string GenerateSetVersionMessage(VersionVariables variables) + public override string GenerateSetVersionMessage(GitVersionVariables variables) { // For AzurePipelines, we'll get the Build Number and insert GitVersion variables where // specified @@ -33,7 +30,7 @@ public override string GenerateSetVersionMessage(VersionVariables variables) if (buildNumberEnv.IsNullOrWhiteSpace()) return variables.FullSemVer; - var newBuildNumber = variables.Aggregate(buildNumberEnv, ReplaceVariables); + var newBuildNumber = variables.OrderBy(x => x.Key).Aggregate(buildNumberEnv, ReplaceVariables); // If no variable substitution has happened, use FullSemVer if (buildNumberEnv == newBuildNumber) @@ -48,10 +45,14 @@ public override string GenerateSetVersionMessage(VersionVariables variables) return $"##vso[build.updatebuildnumber]{newBuildNumber}"; } - private static string ReplaceVariables(string buildNumberEnv, KeyValuePair variable) + private static string ReplaceVariables(string buildNumberEnv, KeyValuePair variable) { var pattern = $@"\$\(GITVERSION[_\.]{variable.Key}\)"; - var replacement = variable.Value ?? string.Empty; - return buildNumberEnv.RegexReplace(pattern, replacement, RegexOptions.IgnoreCase); + var replacement = variable.Value; + return replacement switch + { + null => buildNumberEnv, + _ => buildNumberEnv.RegexReplace(pattern, replacement, RegexOptions.IgnoreCase) + }; } } diff --git a/src/GitVersion.Core/BuildAgents/BitBucketPipelines.cs b/src/GitVersion.BuildAgents/Agents/BitBucketPipelines.cs similarity index 50% rename from src/GitVersion.Core/BuildAgents/BitBucketPipelines.cs rename to src/GitVersion.BuildAgents/Agents/BitBucketPipelines.cs index ae58d7f1fc..61d62465f0 100644 --- a/src/GitVersion.Core/BuildAgents/BitBucketPipelines.cs +++ b/src/GitVersion.BuildAgents/Agents/BitBucketPipelines.cs @@ -1,54 +1,72 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class BitBucketPipelines : BuildAgentBase +internal class BitBucketPipelines : BuildAgentBase { public const string EnvironmentVariableName = "BITBUCKET_WORKSPACE"; public const string BranchEnvironmentVariableName = "BITBUCKET_BRANCH"; public const string TagEnvironmentVariableName = "BITBUCKET_TAG"; public const string PullRequestEnvironmentVariableName = "BITBUCKET_PR_ID"; - private string? file; + private string? propertyFile; + private string? ps1File; - public BitBucketPipelines(IEnvironment environment, ILog log) : base(environment, log) => WithPropertyFile("gitversion.properties"); + public BitBucketPipelines(IEnvironment environment, ILog log) : base(environment, log) + { + WithPropertyFile("gitversion.properties"); + WithPowershellFile("gitversion.ps1"); + } protected override string EnvironmentVariable => EnvironmentVariableName; - public override string? GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public void WithPropertyFile(string propertiesFileName) => this.file = propertiesFileName; + public void WithPropertyFile(string propertiesFileName) => this.propertyFile = propertiesFileName; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { - $"GITVERSION_{name.ToUpperInvariant()}={value}" - }; + public void WithPowershellFile(string powershellFileName) => this.ps1File = powershellFileName; + + public override string[] GenerateSetParameterMessage(string name, string? value) => [$"GITVERSION_{name.ToUpperInvariant()}={value}"]; - public override void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) + public override void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) { - if (this.file is null) + if (this.propertyFile is null || this.ps1File is null) return; base.WriteIntegration(writer, variables, updateBuildNumber); - writer($"Outputting variables to '{this.file}' ... "); + writer($"Outputting variables to '{this.propertyFile}' for Bash,"); + writer($"and to '{this.ps1File}' for Powershell ... "); writer("To import the file into your build environment, add the following line to your build step:"); - writer($" - source {this.file}"); + writer($"Bash:"); + writer($" - source {this.propertyFile}"); + writer($"Powershell:"); + writer($" - . .\\{this.ps1File}"); writer(""); writer("To reuse the file across build steps, add the file as a build artifact:"); + writer($"Bash:"); writer(" artifacts:"); - writer($" - {this.file}"); + writer($" - {this.propertyFile}"); + writer($"Powershell:"); + writer(" artifacts:"); + writer($" - {this.ps1File}"); var exports = variables .Select(variable => $"export GITVERSION_{variable.Key.ToUpperInvariant()}={variable.Value}") .ToList(); - File.WriteAllLines(this.file, exports); + File.WriteAllLines(this.propertyFile, exports); + + var psExports = variables + .Select(variable => $"$GITVERSION_{variable.Key.ToUpperInvariant()} = \"{variable.Value}\"") + .ToList(); + + File.WriteAllLines(this.ps1File, psExports); } public override string? GetCurrentBranch(bool usingDynamicRepos) { var branchName = EvaluateEnvironmentVariable(BranchEnvironmentVariableName); - if (branchName != null && branchName.StartsWith("refs/heads/")) + if (branchName?.StartsWith("refs/heads/") == true) { return branchName; } @@ -59,7 +77,7 @@ public override void WriteIntegration(Action writer, VersionVariables v private string? EvaluateEnvironmentVariable(string variableName) { var branchName = Environment.GetEnvironmentVariable(variableName); - Log.Info("Evaluating environment variable {0} : {1}", variableName, branchName!); + this.Log.Info("Evaluating environment variable {0} : {1}", variableName, branchName ?? "(null)"); return branchName; } } diff --git a/src/GitVersion.Core/BuildAgents/BuildKite.cs b/src/GitVersion.BuildAgents/Agents/BuildKite.cs similarity index 59% rename from src/GitVersion.Core/BuildAgents/BuildKite.cs rename to src/GitVersion.BuildAgents/Agents/BuildKite.cs index f54fb2a1ca..2b5a1bf12d 100644 --- a/src/GitVersion.Core/BuildAgents/BuildKite.cs +++ b/src/GitVersion.BuildAgents/Agents/BuildKite.cs @@ -1,25 +1,21 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class BuildKite : BuildAgentBase +internal class BuildKite(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public BuildKite(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "BUILDKITE"; protected override string EnvironmentVariable => EnvironmentVariableName; public override bool CanApplyToCurrentContext() => "true".Equals(Environment.GetEnvironmentVariable(EnvironmentVariable), StringComparison.OrdinalIgnoreCase); - public override string GenerateSetVersionMessage(VersionVariables variables) => + public override string GenerateSetVersionMessage(GitVersionVariables variables) => string.Empty; // There is no equivalent function in BuildKite. - public override string[] GenerateSetParameterMessage(string name, string value) => - Array.Empty(); // There is no equivalent function in BuildKite. + public override string[] GenerateSetParameterMessage(string name, string? value) => + []; // There is no equivalent function in BuildKite. public override string? GetCurrentBranch(bool usingDynamicRepos) { @@ -28,12 +24,10 @@ public override string[] GenerateSetParameterMessage(string name, string value) { return Environment.GetEnvironmentVariable("BUILDKITE_BRANCH"); } - else - { - // For pull requests BUILDKITE_BRANCH refers to the head, so adjust the - // branch name for pull request versioning to function as expected - return string.Format("refs/pull/{0}/head", pullRequest); - } + + // For pull requests BUILDKITE_BRANCH refers to the head, so adjust the + // branch name for pull request versioning to function as expected + return $"refs/pull/{pullRequest}/head"; } public override bool PreventFetch() => true; diff --git a/src/GitVersion.Core/BuildAgents/CodeBuild.cs b/src/GitVersion.BuildAgents/Agents/CodeBuild.cs similarity index 85% rename from src/GitVersion.Core/BuildAgents/CodeBuild.cs rename to src/GitVersion.BuildAgents/Agents/CodeBuild.cs index 1b06d29ce4..402c97f055 100644 --- a/src/GitVersion.Core/BuildAgents/CodeBuild.cs +++ b/src/GitVersion.BuildAgents/Agents/CodeBuild.cs @@ -2,9 +2,9 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public sealed class CodeBuild : BuildAgentBase +internal sealed class CodeBuild : BuildAgentBase { private string? file; public const string WebHookEnvironmentVariableName = "CODEBUILD_WEBHOOK_HEAD_REF"; @@ -16,12 +16,12 @@ public sealed class CodeBuild : BuildAgentBase protected override string EnvironmentVariable => WebHookEnvironmentVariableName; - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"GitVersion_{name}={value}" - }; + ]; public override string? GetCurrentBranch(bool usingDynamicRepos) { @@ -30,7 +30,7 @@ public override string[] GenerateSetParameterMessage(string name, string value) return currentBranch.IsNullOrEmpty() ? Environment.GetEnvironmentVariable(SourceVersionEnvironmentVariableName) : currentBranch; } - public override void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) + public override void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) { if (this.file is null) return; diff --git a/src/GitVersion.Core/BuildAgents/ContinuaCi.cs b/src/GitVersion.BuildAgents/Agents/ContinuaCi.cs similarity index 54% rename from src/GitVersion.Core/BuildAgents/ContinuaCi.cs rename to src/GitVersion.BuildAgents/Agents/ContinuaCi.cs index 7b2fb178ba..fa96cdc04b 100644 --- a/src/GitVersion.Core/BuildAgents/ContinuaCi.cs +++ b/src/GitVersion.BuildAgents/Agents/ContinuaCi.cs @@ -1,24 +1,20 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class ContinuaCi : BuildAgentBase +internal class ContinuaCi(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public ContinuaCi(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "ContinuaCI.Version"; protected override string EnvironmentVariable => EnvironmentVariableName; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"@@continua[setVariable name='GitVersion_{name}' value='{value}' skipIfNotDefined='true']" - }; + ]; - public override string GenerateSetVersionMessage(VersionVariables variables) => $"@@continua[setBuildVersion value='{variables.FullSemVer}']"; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => $"@@continua[setBuildVersion value='{variables.FullSemVer}']"; public override bool PreventFetch() => false; } diff --git a/src/GitVersion.Core/BuildAgents/Drone.cs b/src/GitVersion.BuildAgents/Agents/Drone.cs similarity index 86% rename from src/GitVersion.Core/BuildAgents/Drone.cs rename to src/GitVersion.BuildAgents/Agents/Drone.cs index df592adaa0..2504ea927c 100644 --- a/src/GitVersion.Core/BuildAgents/Drone.cs +++ b/src/GitVersion.BuildAgents/Agents/Drone.cs @@ -2,24 +2,20 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class Drone : BuildAgentBase +internal class Drone(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public Drone(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "DRONE"; protected override string EnvironmentVariable => EnvironmentVariableName; public override bool CanApplyToCurrentContext() => "true".Equals(Environment.GetEnvironmentVariable(EnvironmentVariable), StringComparison.OrdinalIgnoreCase); - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"GitVersion_{name}={value}" - }; + ]; public override string? GetCurrentBranch(bool usingDynamicRepos) { diff --git a/src/GitVersion.Core/BuildAgents/EnvRun.cs b/src/GitVersion.BuildAgents/Agents/EnvRun.cs similarity index 74% rename from src/GitVersion.Core/BuildAgents/EnvRun.cs rename to src/GitVersion.BuildAgents/Agents/EnvRun.cs index 9853ca453f..52092c8da1 100644 --- a/src/GitVersion.Core/BuildAgents/EnvRun.cs +++ b/src/GitVersion.BuildAgents/Agents/EnvRun.cs @@ -2,14 +2,10 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class EnvRun : BuildAgentBase +internal class EnvRun(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public EnvRun(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "ENVRUN_DATABASE"; protected override string EnvironmentVariable => EnvironmentVariableName; public override bool CanApplyToCurrentContext() @@ -29,11 +25,11 @@ public override bool CanApplyToCurrentContext() return false; } - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"@@envrun[set name='GitVersion_{name}' value='{value}']" - }; + ]; public override bool PreventFetch() => true; } diff --git a/src/GitVersion.Core/BuildAgents/GitHubActions.cs b/src/GitVersion.BuildAgents/Agents/GitHubActions.cs similarity index 68% rename from src/GitVersion.Core/BuildAgents/GitHubActions.cs rename to src/GitVersion.BuildAgents/Agents/GitHubActions.cs index f1a694367e..7d5b8a9122 100644 --- a/src/GitVersion.Core/BuildAgents/GitHubActions.cs +++ b/src/GitVersion.BuildAgents/Agents/GitHubActions.cs @@ -2,34 +2,30 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class GitHubActions : BuildAgentBase +internal class GitHubActions(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { // https://help.github.com/en/actions/automating-your-workflow-with-github-actions/using-environment-variables#default-environment-variables - public GitHubActions(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "GITHUB_ACTIONS"; public const string GitHubSetEnvTempFileEnvironmentVariableName = "GITHUB_ENV"; protected override string EnvironmentVariable => EnvironmentVariableName; - public override string GenerateSetVersionMessage(VersionVariables variables) => + public override string GenerateSetVersionMessage(GitVersionVariables variables) => string.Empty; // There is no equivalent function in GitHub Actions. - public override string[] GenerateSetParameterMessage(string name, string value) => - Array.Empty(); // There is no equivalent function in GitHub Actions. + public override string[] GenerateSetParameterMessage(string name, string? value) => + []; // There is no equivalent function in GitHub Actions. - public override void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) + public override void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) { base.WriteIntegration(writer, variables, updateBuildNumber); // https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#environment-files // The outgoing environment variables must be written to a temporary file (identified by the $GITHUB_ENV environment - // variable, which changes for every step in a workflow) which is then parsed. That file must also be UTF-8 or it will fail. + // variable, which changes for every step in a workflow) which is then parsed. That file must also be UTF-8, or it will fail. var gitHubSetEnvFilePath = this.Environment.GetEnvironmentVariable(GitHubSetEnvTempFileEnvironmentVariableName); if (gitHubSetEnvFilePath != null) @@ -50,7 +46,15 @@ public override void WriteIntegration(Action writer, VersionVariables v } } - public override string? GetCurrentBranch(bool usingDynamicRepos) => Environment.GetEnvironmentVariable("GITHUB_REF"); + public override string? GetCurrentBranch(bool usingDynamicRepos) + { + // https://docs.github.com/en/actions/learn-github-actions/environment-variables#default-environment-variables + // GITHUB_REF must be used only for "real" branches, not for tags. + // Bug fix for https://github.com/GitTools/GitVersion/issues/2838 + + var refType = Environment.GetEnvironmentVariable("GITHUB_REF_TYPE") ?? ""; + return refType.Equals("tag", StringComparison.OrdinalIgnoreCase) ? null : Environment.GetEnvironmentVariable("GITHUB_REF"); + } public override bool PreventFetch() => true; } diff --git a/src/GitVersion.Core/BuildAgents/GitLabCi.cs b/src/GitVersion.BuildAgents/Agents/GitLabCi.cs similarity index 79% rename from src/GitVersion.Core/BuildAgents/GitLabCi.cs rename to src/GitVersion.BuildAgents/Agents/GitLabCi.cs index e20adcf783..0956084ab7 100644 --- a/src/GitVersion.Core/BuildAgents/GitLabCi.cs +++ b/src/GitVersion.BuildAgents/Agents/GitLabCi.cs @@ -1,9 +1,9 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class GitLabCi : BuildAgentBase +internal class GitLabCi : BuildAgentBase { public const string EnvironmentVariableName = "GITLAB_CI"; private string? file; @@ -14,19 +14,18 @@ public class GitLabCi : BuildAgentBase protected override string EnvironmentVariable => EnvironmentVariableName; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; - - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"GitVersion_{name}={value}" - }; + ]; public override string? GetCurrentBranch(bool usingDynamicRepos) => Environment.GetEnvironmentVariable("CI_COMMIT_REF_NAME"); public override bool PreventFetch() => true; - public override void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) + public override void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) { if (this.file is null) return; @@ -36,5 +35,4 @@ public override void WriteIntegration(Action writer, VersionVariables v File.WriteAllLines(this.file, GenerateBuildLogOutput(variables)); } - } diff --git a/src/GitVersion.Core/BuildAgents/Jenkins.cs b/src/GitVersion.BuildAgents/Agents/Jenkins.cs similarity index 85% rename from src/GitVersion.Core/BuildAgents/Jenkins.cs rename to src/GitVersion.BuildAgents/Agents/Jenkins.cs index c9105d765e..dfd45beb16 100644 --- a/src/GitVersion.Core/BuildAgents/Jenkins.cs +++ b/src/GitVersion.BuildAgents/Agents/Jenkins.cs @@ -2,9 +2,9 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class Jenkins : BuildAgentBase +internal class Jenkins : BuildAgentBase { public const string EnvironmentVariableName = "JENKINS_URL"; private string? file; @@ -14,12 +14,12 @@ public class Jenkins : BuildAgentBase public void WithPropertyFile(string propertiesFileName) => this.file = propertiesFileName; - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"GitVersion_{name}={value}" - }; + ]; public override string? GetCurrentBranch(bool usingDynamicRepos) => IsPipelineAsCode() ? Environment.GetEnvironmentVariable("BRANCH_NAME") @@ -36,7 +36,7 @@ public override string[] GenerateSetParameterMessage(string name, string value) /// public override bool ShouldCleanUpRemotes() => IsPipelineAsCode(); - public override void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) + public override void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) { if (this.file is null) return; @@ -45,5 +45,4 @@ public override void WriteIntegration(Action writer, VersionVariables v writer($"Outputting variables to '{this.file}' ... "); File.WriteAllLines(this.file, GenerateBuildLogOutput(variables)); } - } diff --git a/src/GitVersion.Core/BuildAgents/MyGet.cs b/src/GitVersion.BuildAgents/Agents/MyGet.cs similarity index 70% rename from src/GitVersion.Core/BuildAgents/MyGet.cs rename to src/GitVersion.BuildAgents/Agents/MyGet.cs index 2f77cc69d6..42fc06de29 100644 --- a/src/GitVersion.Core/BuildAgents/MyGet.cs +++ b/src/GitVersion.BuildAgents/Agents/MyGet.cs @@ -3,14 +3,10 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class MyGet : BuildAgentBase +internal class MyGet(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public MyGet(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "BuildRunner"; protected override string EnvironmentVariable => EnvironmentVariableName; public override bool CanApplyToCurrentContext() @@ -21,22 +17,22 @@ public override bool CanApplyToCurrentContext() && buildRunner.Equals("MyGet", StringComparison.InvariantCultureIgnoreCase); } - public override string[] GenerateSetParameterMessage(string name, string value) + public override string[] GenerateSetParameterMessage(string name, string? value) { var messages = new List { $"##myget[setParameter name='GitVersion.{name}' value='{ServiceMessageEscapeHelper.EscapeValue(value)}']" }; - if (string.Equals(name, "LegacySemVerPadded", StringComparison.InvariantCultureIgnoreCase)) + if (string.Equals(name, "SemVer", StringComparison.InvariantCultureIgnoreCase)) { messages.Add($"##myget[buildNumber '{ServiceMessageEscapeHelper.EscapeValue(value)}']"); } - return messages.ToArray(); + return [.. messages]; } - public override string? GenerateSetVersionMessage(VersionVariables variables) => null; + public override string? GenerateSetVersionMessage(GitVersionVariables variables) => null; public override bool PreventFetch() => false; } diff --git a/src/GitVersion.Core/BuildAgents/SpaceAutomation.cs b/src/GitVersion.BuildAgents/Agents/SpaceAutomation.cs similarity index 56% rename from src/GitVersion.Core/BuildAgents/SpaceAutomation.cs rename to src/GitVersion.BuildAgents/Agents/SpaceAutomation.cs index 43be822a07..10882a2fef 100644 --- a/src/GitVersion.Core/BuildAgents/SpaceAutomation.cs +++ b/src/GitVersion.BuildAgents/Agents/SpaceAutomation.cs @@ -1,21 +1,17 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class SpaceAutomation : BuildAgentBase +internal class SpaceAutomation(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public SpaceAutomation(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "JB_SPACE_PROJECT_KEY"; protected override string EnvironmentVariable => EnvironmentVariableName; public override string? GetCurrentBranch(bool usingDynamicRepos) => Environment.GetEnvironmentVariable("JB_SPACE_GIT_BRANCH"); - public override string[] GenerateSetParameterMessage(string name, string value) => Array.Empty(); + public override string[] GenerateSetParameterMessage(string name, string? value) => []; - public override string GenerateSetVersionMessage(VersionVariables variables) => string.Empty; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => string.Empty; } diff --git a/src/GitVersion.Core/BuildAgents/TeamCity.cs b/src/GitVersion.BuildAgents/Agents/TeamCity.cs similarity index 80% rename from src/GitVersion.Core/BuildAgents/TeamCity.cs rename to src/GitVersion.BuildAgents/Agents/TeamCity.cs index 59b7d09ba0..91d1915ba0 100644 --- a/src/GitVersion.Core/BuildAgents/TeamCity.cs +++ b/src/GitVersion.BuildAgents/Agents/TeamCity.cs @@ -3,14 +3,10 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class TeamCity : BuildAgentBase +internal class TeamCity(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public TeamCity(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "TEAMCITY_VERSION"; protected override string EnvironmentVariable => EnvironmentVariableName; @@ -39,11 +35,11 @@ private void WriteBranchEnvVariableWarning() => this.Log.Warning(@"TeamCity does public override bool PreventFetch() => !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("Git_Branch")); - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"##teamcity[setParameter name='GitVersion.{name}' value='{ServiceMessageEscapeHelper.EscapeValue(value)}']", $"##teamcity[setParameter name='system.GitVersion.{name}' value='{ServiceMessageEscapeHelper.EscapeValue(value)}']" - }; + ]; - public override string GenerateSetVersionMessage(VersionVariables variables) => $"##teamcity[buildNumber '{ServiceMessageEscapeHelper.EscapeValue(variables.FullSemVer)}']"; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => $"##teamcity[buildNumber '{ServiceMessageEscapeHelper.EscapeValue(variables.FullSemVer)}']"; } diff --git a/src/GitVersion.Core/BuildAgents/TravisCI.cs b/src/GitVersion.BuildAgents/Agents/TravisCI.cs similarity index 63% rename from src/GitVersion.Core/BuildAgents/TravisCI.cs rename to src/GitVersion.BuildAgents/Agents/TravisCI.cs index 520864feaf..70bef8c2f6 100644 --- a/src/GitVersion.Core/BuildAgents/TravisCI.cs +++ b/src/GitVersion.BuildAgents/Agents/TravisCI.cs @@ -1,25 +1,21 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class TravisCi : BuildAgentBase +internal class TravisCi(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) { - public TravisCi(IEnvironment environment, ILog log) : base(environment, log) - { - } - public const string EnvironmentVariableName = "TRAVIS"; protected override string EnvironmentVariable => EnvironmentVariableName; public override bool CanApplyToCurrentContext() => "true".Equals(Environment.GetEnvironmentVariable(EnvironmentVariable)) && "true".Equals(Environment.GetEnvironmentVariable("CI")); - public override string GenerateSetVersionMessage(VersionVariables variables) => variables.FullSemVer; + public override string GenerateSetVersionMessage(GitVersionVariables variables) => variables.FullSemVer; - public override string[] GenerateSetParameterMessage(string name, string value) => new[] - { + public override string[] GenerateSetParameterMessage(string name, string? value) => + [ $"GitVersion_{name}={value}" - }; + ]; public override bool PreventFetch() => true; } diff --git a/src/GitVersion.BuildAgents/GitVersion.BuildAgents.csproj b/src/GitVersion.BuildAgents/GitVersion.BuildAgents.csproj new file mode 100644 index 0000000000..13485fe695 --- /dev/null +++ b/src/GitVersion.BuildAgents/GitVersion.BuildAgents.csproj @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/GitVersion.BuildAgents/GitVersionBuildAgentsModule.cs b/src/GitVersion.BuildAgents/GitVersionBuildAgentsModule.cs new file mode 100644 index 0000000000..17ba4b85b8 --- /dev/null +++ b/src/GitVersion.BuildAgents/GitVersionBuildAgentsModule.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.Agents; + +public class GitVersionBuildAgentsModule : IGitVersionModule +{ + public void RegisterTypes(IServiceCollection services) + { + var buildAgents = IGitVersionModule.FindAllDerivedTypes(Assembly.GetAssembly(GetType())); + + foreach (var buildAgent in buildAgents) + { + services.AddSingleton(typeof(IBuildAgent), buildAgent); + } + } +} diff --git a/src/GitVersion.BuildAgents/PublicAPI.Shipped.txt b/src/GitVersion.BuildAgents/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..7dc5c58110 --- /dev/null +++ b/src/GitVersion.BuildAgents/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/GitVersion.BuildAgents/PublicAPI.Unshipped.txt b/src/GitVersion.BuildAgents/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..271d1babf9 --- /dev/null +++ b/src/GitVersion.BuildAgents/PublicAPI.Unshipped.txt @@ -0,0 +1,4 @@ +#nullable enable +GitVersion.Agents.GitVersionBuildAgentsModule +GitVersion.Agents.GitVersionBuildAgentsModule.GitVersionBuildAgentsModule() -> void +GitVersion.Agents.GitVersionBuildAgentsModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void diff --git a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs new file mode 100644 index 0000000000..4edbae0b4e --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationExtensionsTests.cs @@ -0,0 +1,58 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; +using GitVersion.Git; + +namespace GitVersion.Core.Tests.Configuration; + +[TestFixture] +public class ConfigurationExtensionsTests : TestBase +{ + [TestCase("release/2.0.0", + "refs/heads/release/2.0.0", "release/2.0.0", "release/2.0.0", + true, false, false, false, true)] + [TestCase("upstream/release/2.0.0", + "refs/heads/upstream/release/2.0.0", "upstream/release/2.0.0", "upstream/release/2.0.0", + true, false, false, false, false)] + [TestCase("origin/release/2.0.0", + "refs/heads/origin/release/2.0.0", "origin/release/2.0.0", "origin/release/2.0.0", + true, false, false, false, false)] + [TestCase("refs/remotes/upstream/release/2.0.0", + "refs/remotes/upstream/release/2.0.0", "upstream/release/2.0.0", "upstream/release/2.0.0", + false, false, true, false, false)] + [TestCase("refs/remotes/origin/release/2.0.0", + "refs/remotes/origin/release/2.0.0", "origin/release/2.0.0", "release/2.0.0", + false, false, true, false, true)] + public void EnsureIsReleaseBranchWithReferenceNameWorksAsExpected(string branchName, string expectedCanonical, string expectedFriendly, string expectedWithoutOrigin, + bool expectedIsLocalBranch, bool expectedIsPullRequest, bool expectedIsRemoteBranch, bool expectedIsTag, bool expectedIsReleaseBranch) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + var actual = ReferenceName.FromBranchName(branchName); + var isReleaseBranch = configuration.IsReleaseBranch(actual); + + actual.Canonical.ShouldBe(expectedCanonical); + actual.Friendly.ShouldBe(expectedFriendly); + actual.WithoutOrigin.ShouldBe(expectedWithoutOrigin); + actual.IsLocalBranch.ShouldBe(expectedIsLocalBranch); + actual.IsPullRequest.ShouldBe(expectedIsPullRequest); + actual.IsRemoteBranch.ShouldBe(expectedIsRemoteBranch); + actual.IsTag.ShouldBe(expectedIsTag); + isReleaseBranch.ShouldBe(expectedIsReleaseBranch); + } + + [TestCase("feature/sc-1000/Description", "^features?[/-](?.+)", "{BranchName}", "sc-1000-Description")] + [TestCase("feature/sc-1000/Description", "^features?[/-](?sc-\\d+)[-/].+", "{StoryNo}", "sc-1000")] + public void EnsureGetBranchSpecificLabelWorksAsExpected(string branchName, string regularExpression, string label, string expectedLabel) + { + var configuration = GitFlowConfigurationBuilder.New + .WithoutBranches() + .WithBranch(branchName, builder => builder + .WithLabel(label) + .WithRegularExpression(regularExpression)) + .Build(); + + var effectiveConfiguration = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName(branchName)); + var actual = effectiveConfiguration.GetBranchSpecificLabel(ReferenceName.FromBranchName(branchName), null); + actual.ShouldBe(expectedLabel); + } +} diff --git a/src/GitVersion.Core.Tests/Configuration/DefaultConfigFileLocatorTests.cs b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs similarity index 56% rename from src/GitVersion.Core.Tests/Configuration/DefaultConfigFileLocatorTests.cs rename to src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs index 0ee6005603..48c43afa15 100644 --- a/src/GitVersion.Core.Tests/Configuration/DefaultConfigFileLocatorTests.cs +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs @@ -1,94 +1,83 @@ using GitVersion.Configuration; +using GitVersion.Configuration.Tests.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.Logging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; [TestFixture] -public class ConfigFileLocatorTests +public static class ConfigurationFileLocatorTests { public class DefaultConfigFileLocatorTests : TestBase { - private const string DefaultRepoPath = @"c:\MyGitRepo"; - private const string DefaultWorkingPath = @"c:\MyGitRepo\Working"; - private string repoPath; private string workingPath; private IFileSystem fileSystem; - private IConfigProvider configurationProvider; - private IConfigFileLocator configFileLocator; + private ConfigurationProvider configurationProvider; + private IConfigurationFileLocator configFileLocator; [SetUp] public void Setup() { - this.repoPath = DefaultRepoPath; - this.workingPath = DefaultWorkingPath; + this.repoPath = PathHelper.Combine(PathHelper.GetTempPath(), "MyGitRepo"); + this.workingPath = PathHelper.Combine(PathHelper.GetTempPath(), "MyGitRepo", "Working"); var options = Options.Create(new GitVersionOptions { WorkingDirectory = repoPath }); var sp = ConfigureServices(services => services.AddSingleton(options)); this.fileSystem = sp.GetRequiredService(); - this.configurationProvider = sp.GetRequiredService(); - this.configFileLocator = sp.GetRequiredService(); + this.configurationProvider = (ConfigurationProvider)sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); } - [TestCase(ConfigFileLocator.DefaultFileName, ConfigFileLocator.DefaultFileName)] + [TestCase(ConfigurationFileLocator.DefaultFileName, ConfigurationFileLocator.DefaultFileName)] + [TestCase(ConfigurationFileLocator.DefaultFileName, ConfigurationFileLocator.DefaultAlternativeFileName)] + [TestCase(ConfigurationFileLocator.DefaultAlternativeFileName, ConfigurationFileLocator.DefaultFileName)] + [TestCase(ConfigurationFileLocator.DefaultAlternativeFileName, ConfigurationFileLocator.DefaultAlternativeFileName)] public void ThrowsExceptionOnAmbiguousConfigFileLocation(string repoConfigFile, string workingConfigFile) { - var repositoryConfigFilePath = SetupConfigFileContent(string.Empty, repoConfigFile, this.repoPath); - var workingDirectoryConfigFilePath = SetupConfigFileContent(string.Empty, workingConfigFile, this.workingPath); + using var repositoryConfigFilePath = this.fileSystem.SetupConfigFile(path: this.repoPath, fileName: repoConfigFile); + using var workingDirectoryConfigFilePath = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: workingConfigFile); var exception = Should.Throw(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); - var expectedMessage = $"Ambiguous config file selection from '{workingDirectoryConfigFilePath}' and '{repositoryConfigFilePath}'"; + var expectedMessage = $"Ambiguous configuration file selection from '{workingDirectoryConfigFilePath.Value}' and '{repositoryConfigFilePath.Value}'"; exception.Message.ShouldBe(expectedMessage); } - [Test] - public void NoWarnOnGitVersionYmlFile() + [TestCase(ConfigurationFileLocator.DefaultFileName)] + [TestCase(ConfigurationFileLocator.DefaultAlternativeFileName)] + public void NoWarnOnGitVersionYmlFile(string configurationFile) { - SetupConfigFileContent(string.Empty, ConfigFileLocator.DefaultFileName, this.repoPath); + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, fileName: configurationFile); - Should.NotThrow(() => this.configurationProvider.Provide(this.repoPath)); + Should.NotThrow(() => this.configurationProvider.ProvideForDirectory(this.repoPath)); } [Test] - public void NoWarnOnNoGitVersionYmlFile() => Should.NotThrow(() => this.configurationProvider.Provide(this.repoPath)); - - private string SetupConfigFileContent(string text, string fileName, string path) - { - var fullPath = PathHelper.Combine(path, fileName); - this.fileSystem.WriteAllText(fullPath, text); - - return fullPath; - } + public void NoWarnOnNoGitVersionYmlFile() => Should.NotThrow(() => this.configurationProvider.ProvideForDirectory(this.repoPath)); } - public class NamedConfigFileLocatorTests : TestBase + public class NamedConfigurationFileLocatorTests : TestBase { - private const string DefaultRepoPath = @"c:\MyGitRepo"; - private const string DefaultWorkingPath = @"c:\MyGitRepo\Working"; - private string repoPath; private string workingPath; private IFileSystem fileSystem; - private IConfigFileLocator configFileLocator; + private IConfigurationFileLocator configFileLocator; private GitVersionOptions gitVersionOptions; + private string ConfigFile => this.gitVersionOptions.ConfigurationInfo.ConfigurationFile!; [SetUp] public void Setup() { - this.gitVersionOptions = new GitVersionOptions { ConfigInfo = { ConfigFile = "my-config.yaml" } }; - this.repoPath = DefaultRepoPath; - this.workingPath = DefaultWorkingPath; + this.gitVersionOptions = new() { ConfigurationInfo = { ConfigurationFile = "my-config.yaml" } }; + this.repoPath = PathHelper.Combine(PathHelper.GetTempPath(), "MyGitRepo"); + this.workingPath = PathHelper.Combine(PathHelper.GetTempPath(), "MyGitRepo", "Working"); ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); } @@ -97,28 +86,28 @@ public void Setup() public void ThrowsExceptionOnAmbiguousConfigFileLocation() { var sp = GetServiceProvider(this.gitVersionOptions); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); this.fileSystem = sp.GetRequiredService(); - var repositoryConfigFilePath = SetupConfigFileContent(string.Empty, path: this.repoPath); - var workingDirectoryConfigFilePath = SetupConfigFileContent(string.Empty, path: this.workingPath); + using var repositoryConfigFilePath = this.fileSystem.SetupConfigFile(path: this.repoPath, fileName: ConfigFile); + using var workDirConfigFilePath = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: ConfigFile); var exception = Should.Throw(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); - var expectedMessage = $"Ambiguous config file selection from '{workingDirectoryConfigFilePath}' and '{repositoryConfigFilePath}'"; + var expectedMessage = $"Ambiguous configuration file selection from '{workDirConfigFilePath.Value}' and '{repositoryConfigFilePath.Value}'"; exception.Message.ShouldBe(expectedMessage); } [Test] public void DoNotThrowWhenWorkingAndRepoPathsAreSame() { - this.workingPath = DefaultRepoPath; + this.workingPath = this.repoPath; var sp = GetServiceProvider(this.gitVersionOptions); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); this.fileSystem = sp.GetRequiredService(); - SetupConfigFileContent(string.Empty, path: this.workingPath); + using var _ = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: ConfigFile); Should.NotThrow(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); } @@ -126,13 +115,13 @@ public void DoNotThrowWhenWorkingAndRepoPathsAreSame() [Test] public void DoNotThrowWhenWorkingAndRepoPathsAreSame_WithDifferentCasing() { - this.workingPath = DefaultRepoPath.ToLower(); + this.workingPath = this.repoPath.ToLower(); var sp = GetServiceProvider(this.gitVersionOptions); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); this.fileSystem = sp.GetRequiredService(); - SetupConfigFileContent(string.Empty, path: this.workingPath); + using var _ = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: ConfigFile); Should.NotThrow(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); } @@ -140,14 +129,14 @@ public void DoNotThrowWhenWorkingAndRepoPathsAreSame_WithDifferentCasing() [Test] public void DoNotThrowWhenConfigFileIsInSubDirectoryOfRepoPath() { - this.workingPath = DefaultRepoPath; + this.workingPath = this.repoPath; - this.gitVersionOptions = new GitVersionOptions { ConfigInfo = { ConfigFile = "./src/my-config.yaml" } }; + this.gitVersionOptions = new() { ConfigurationInfo = { ConfigurationFile = "./src/my-config.yaml" } }; var sp = GetServiceProvider(this.gitVersionOptions); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); this.fileSystem = sp.GetRequiredService(); - SetupConfigFileContent(string.Empty, path: this.workingPath); + using var _ = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: ConfigFile); Should.NotThrow(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); } @@ -162,14 +151,14 @@ public void NoWarnOnCustomYmlFile() var log = new Log(logAppender); var sp = GetServiceProvider(this.gitVersionOptions, log); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); this.fileSystem = sp.GetRequiredService(); - SetupConfigFileContent(string.Empty); + using var _ = this.fileSystem.SetupConfigFile(path: null, fileName: ConfigFile); - var configurationProvider = sp.GetRequiredService(); + var configurationProvider = (ConfigurationProvider)sp.GetRequiredService(); - configurationProvider.Provide(this.repoPath); + configurationProvider.ProvideForDirectory(this.repoPath); stringLogger.Length.ShouldBe(0); } @@ -183,14 +172,15 @@ public void NoWarnOnCustomYmlFileOutsideRepoPath() var log = new Log(logAppender); var sp = GetServiceProvider(this.gitVersionOptions, log); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); this.fileSystem = sp.GetRequiredService(); - SetupConfigFileContent(string.Empty, path: @"c:\\Unrelated\\path"); + string path = PathHelper.Combine(PathHelper.GetTempPath(), "unrelatedPath"); + using var _ = this.fileSystem.SetupConfigFile(path: path, fileName: ConfigFile); - var configurationProvider = sp.GetRequiredService(); + var configurationProvider = (ConfigurationProvider)sp.GetRequiredService(); - configurationProvider.Provide(this.repoPath); + configurationProvider.ProvideForDirectory(this.repoPath); stringLogger.Length.ShouldBe(0); } @@ -198,26 +188,17 @@ public void NoWarnOnCustomYmlFileOutsideRepoPath() public void ThrowsExceptionOnCustomYmlFileDoesNotExist() { var sp = GetServiceProvider(this.gitVersionOptions); - this.configFileLocator = sp.GetRequiredService(); + this.configFileLocator = sp.GetRequiredService(); var exception = Should.Throw(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); - var workingPathFileConfig = PathHelper.Combine(this.workingPath, this.gitVersionOptions.ConfigInfo.ConfigFile); - var repoPathFileConfig = PathHelper.Combine(this.repoPath, this.gitVersionOptions.ConfigInfo.ConfigFile); + var configurationFile = this.gitVersionOptions.ConfigurationInfo.ConfigurationFile; + var workingPathFileConfig = PathHelper.Combine(this.workingPath, configurationFile); + var repoPathFileConfig = PathHelper.Combine(this.repoPath, configurationFile); var expectedMessage = $"The configuration file was not found at '{workingPathFileConfig}' or '{repoPathFileConfig}'"; exception.Message.ShouldBe(expectedMessage); } - private string SetupConfigFileContent(string text, string? fileName = null, string? path = null) - { - if (fileName.IsNullOrEmpty()) fileName = this.configFileLocator.FilePath; - var filePath = fileName; - if (!path.IsNullOrEmpty()) - filePath = PathHelper.Combine(path, filePath); - this.fileSystem.WriteAllText(filePath, text); - return filePath; - } - private static IServiceProvider GetServiceProvider(GitVersionOptions gitVersionOptions, ILog? log = null) => ConfigureServices(services => { diff --git a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt new file mode 100644 index 0000000000..78406ad6a1 --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.CanWriteOutEffectiveConfiguration.approved.txt @@ -0,0 +1,166 @@ +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch +tag-prefix: '[vV]?' +version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* +major-version-bump-message: '\+semver:\s?(breaking|major)' +minor-version-bump-message: '\+semver:\s?(feature|minor)' +patch-version-bump-message: '\+semver:\s?(fix|patch)' +no-bump-message: '\+semver:\s?(none|skip)' +tag-pre-release-weight: 60000 +commit-date-format: yyyy-MM-dd +merge-message-formats: {} +update-build-number: true +semantic-version-format: Strict +strategies: +- Fallback +- ConfiguredNextVersion +- MergeMessage +- TaggedCommit +- TrackReleaseBranches +- VersionInBranchName +branches: + develop: + label: alpha + increment: Minor + prevent-increment: + when-current-commit-tagged: false + track-merge-target: true + track-merge-message: true + regex: ^dev(elop)?(ment)?$ + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: true + is-release-branch: false + is-main-branch: false + pre-release-weight: 0 + main: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + track-merge-target: false + track-merge-message: true + regex: ^master$|^main$ + source-branches: [] + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + release: + mode: ManualDeployment + label: beta + increment: Minor + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + track-merge-target: false + regex: ^releases?[/-](?.+) + source-branches: + - main + - support + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + feature: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - develop + - main + - release + - support + - hotfix + is-source-branch-for: [] + is-main-branch: false + pre-release-weight: 30000 + pull-request: + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + label-number-pattern: '[/-](?\d+)' + track-merge-message: true + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - develop + - main + - release + - feature + - support + - hotfix + is-source-branch-for: [] + pre-release-weight: 30000 + hotfix: + mode: ManualDeployment + label: beta + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: ^hotfix(es)?[/-](?.+) + source-branches: + - main + - support + is-source-branch-for: [] + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + support: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + track-merge-target: false + regex: ^support[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: true + regex: (?.+) + source-branches: + - main + - develop + - release + - feature + - pull-request + - hotfix + - support + is-source-branch-for: [] + is-main-branch: false +ignore: + sha: [] +mode: ContinuousDelivery +label: '{BranchName}' +increment: Inherit +prevent-increment: + of-merged-branch: false + when-branch-merged: false + when-current-commit-tagged: true +track-merge-target: false +track-merge-message: true +commit-message-incrementing: Enabled +regex: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false diff --git a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.cs b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.cs new file mode 100644 index 0000000000..754eb114fe --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationProviderTests.cs @@ -0,0 +1,470 @@ +using System.Runtime.CompilerServices; +using GitVersion.Configuration; +using GitVersion.Configuration.Tests.Configuration; +using GitVersion.Core.Tests.Helpers; +using GitVersion.Helpers; +using GitVersion.Logging; +using GitVersion.VersionCalculation; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace GitVersion.Core.Tests; + +[TestFixture] +public class ConfigurationProviderTests : TestBase +{ + private string repoPath; + private ConfigurationProvider configurationProvider; + private IFileSystem fileSystem; + + [SetUp] + public void Setup() + { + this.repoPath = PathHelper.Combine(PathHelper.GetTempPath(), "MyGitRepo"); + var options = Options.Create(new GitVersionOptions { WorkingDirectory = repoPath }); + var sp = ConfigureServices(services => services.AddSingleton(options)); + this.configurationProvider = (ConfigurationProvider)sp.GetRequiredService(); + this.fileSystem = sp.GetRequiredService(); + + ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); + } + + [Test] + public void OverwritesDefaultsWithProvidedConfig() + { + var defaultConfiguration = this.configurationProvider.ProvideForDirectory(this.repoPath); + const string text = @" +next-version: 2.0.0 +branches: + develop: + increment: Major + mode: ContinuousDelivery + label: dev"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.NextVersion.ShouldBe("2.0.0"); + configuration.Branches.ShouldNotBeNull(); + + var developConfiguration = configuration.Branches["develop"]; + developConfiguration.Increment.ShouldBe(IncrementStrategy.Major); + developConfiguration.Increment.ShouldNotBe(defaultConfiguration.Branches["develop"].Increment); + developConfiguration.DeploymentMode.ShouldBe(DeploymentMode.ContinuousDelivery); + developConfiguration.DeploymentMode.ShouldNotBe(defaultConfiguration.Branches["develop"].DeploymentMode); + developConfiguration.Label.ShouldBe("dev"); + } + + [Test] + public void CombineVersionStrategyConfigNextAndTaggedCommit() + { + // Arrange + const string text = "strategies: [ConfiguredNextVersion, TaggedCommit]"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + + // Act + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + // Assert + configuration.VersionStrategy.ShouldBe(VersionStrategies.ConfiguredNextVersion | VersionStrategies.TaggedCommit); + } + + [Test] + public void CanRemoveLabel() + { + const string text = @" +next-version: 2.0.0 +branches: + release: + label: """""; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.NextVersion.ShouldBe("2.0.0"); + configuration.Branches["release"].Label.ShouldBe(string.Empty); + } + + [Test] + public void RegexIsRequired() + { + const string text = @" +next-version: 2.0.0 +branches: + bug: + label: bugfix"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var ex = Should.Throw(() => this.configurationProvider.ProvideForDirectory(this.repoPath)); + ex.Message.ShouldBe($"Branch configuration 'bug' is missing required configuration 'regex'{PathHelper.NewLine}" + + "See https://gitversion.net/docs/reference/configuration for more info"); + } + + [Test(Description = "This test proves the configuration validation will fail early with a helpful message when a branch listed in source-branches has no configuration.")] + public void SourceBranchesValidationShouldFailWhenMatchingBranchConfigurationIsMissing() + { + const string text = @" +branches: + bug: + regex: 'bug[/-]' + label: bugfix + source-branches: [notconfigured]"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var ex = Should.Throw(() => this.configurationProvider.ProvideForDirectory(this.repoPath)); + ex.Message.ShouldBe($"Branch configuration 'bug' defines these 'source-branches' that are not configured: '[notconfigured]'{PathHelper.NewLine}" + + "See https://gitversion.net/docs/reference/configuration for more info"); + } + + [Test(Description = "Well-known branches may not be present in the configuration file. This test confirms the validation check succeeds when the source-branches configuration contain these well-known branches.")] + [TestCase(ConfigurationConstants.MainBranchKey)] + [TestCase(ConfigurationConstants.DevelopBranchKey)] + public void SourceBranchesValidationShouldSucceedForWellKnownBranches(string wellKnownBranchKey) + { + var text = $@" +branches: + bug: + regex: 'bug[/-]' + label: bugfix + source-branches: [{wellKnownBranchKey}]"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.Branches["bug"].SourceBranches.ShouldBe([wellKnownBranchKey]); + } + + [Test] + public void CanProvideConfigForNewBranch() + { + const string text = @" +next-version: 2.0.0 +branches: + bug: + regex: 'bug[/-]' + label: bugfix + source-branches: []"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.Branches["bug"].RegularExpression.ShouldBe("bug[/-]"); + configuration.Branches["bug"].Label.ShouldBe("bugfix"); + } + + [Test] + public void NextVersionCanBeInteger() + { + const string text = "next-version: 2"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.NextVersion.ShouldBe("2.0"); + } + + [Test] + public void NextVersionCanHaveEnormousMinorVersion() + { + const string text = "next-version: 2.118998723"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.NextVersion.ShouldBe("2.118998723"); + } + + [Test] + public void NextVersionCanHavePatch() + { + const string text = "next-version: 2.12.654651698"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.NextVersion.ShouldBe("2.12.654651698"); + } + + [Test] + [MethodImpl(MethodImplOptions.NoInlining)] + public void CanWriteOutEffectiveConfiguration() + { + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + new ConfigurationSerializer().Serialize(configuration).ShouldMatchApproved(); + } + + [Test] + public void CanUpdateAssemblyInformationalVersioningScheme() + { + const string text = @" +assembly-versioning-scheme: MajorMinor +assembly-file-versioning-scheme: MajorMinorPatch +assembly-informational-format: '{NugetVersion}'"; + + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + configuration.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor); + configuration.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); + configuration.AssemblyInformationalFormat.ShouldBe("{NugetVersion}"); + } + + [Test] + public void CanUpdateAssemblyInformationalVersioningSchemeWithMultipleVariables() + { + const string text = @" +assembly-versioning-scheme: MajorMinor +assembly-file-versioning-scheme: MajorMinorPatch +assembly-informational-format: '{Major}.{Minor}.{Patch}'"; + + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + configuration.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor); + configuration.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); + configuration.AssemblyInformationalFormat.ShouldBe("{Major}.{Minor}.{Patch}"); + } + + [Test] + public void CanUpdateAssemblyInformationalVersioningSchemeWithFullSemVer() + { + const string text = @"assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch +assembly-informational-format: '{FullSemVer}' +mode: ContinuousDelivery +next-version: 5.3.0 +branches: {}"; + + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + configuration.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch); + configuration.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); + configuration.AssemblyInformationalFormat.ShouldBe("{FullSemVer}"); + } + + [Test] + public void CanReadDefaultDocument() + { + const string text = ""; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + configuration.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch); + configuration.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); + configuration.AssemblyInformationalFormat.ShouldBe(null); + configuration.Branches["develop"].Label.ShouldBe("alpha"); + configuration.Branches["release"].Label.ShouldBe("beta"); + configuration.TagPrefix.ShouldBe(ConfigurationConstants.DefaultTagPrefix); + configuration.NextVersion.ShouldBe(null); + } + + [Test] + public void VerifyAliases() + { + var configuration = typeof(GitVersionConfiguration); + var propertiesMissingAlias = configuration.GetProperties() + .Where(p => p.GetCustomAttribute() == null + && p.GetCustomAttribute() == null + && p.GetCustomAttribute() == null) + .Select(p => p.Name); + + propertiesMissingAlias.ShouldBeEmpty(); + } + + [Test] + public void NoWarnOnGitVersionYmlFile() + { + const string text = ""; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + + var stringLogger = string.Empty; + void Action(string info) => stringLogger = info; + + var logAppender = new TestLogAppender(Action); + var log = new Log(logAppender); + + var options = Options.Create(new GitVersionOptions { WorkingDirectory = repoPath }); + var sp = ConfigureServices(services => + { + services.AddSingleton(options); + services.AddSingleton(log); + }); + this.configurationProvider = (ConfigurationProvider)sp.GetRequiredService(); + + this.configurationProvider.ProvideForDirectory(this.repoPath); + + stringLogger.Length.ShouldBe(0); + } + + [Test] + public void ShouldUseSpecifiedSourceBranchesForDevelop() + { + const string text = @" +next-version: 2.0.0 +branches: + develop: + mode: ContinuousDeployment + source-branches: ['develop'] + label: dev"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.Branches["develop"].SourceBranches.ShouldBe(["develop"]); + } + + [Test] + public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForDevelop() + { + const string text = @" +next-version: 2.0.0 +branches: + develop: + mode: ContinuousDeployment + label: dev"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.Branches["develop"].SourceBranches.ShouldBe(["main"]); + } + + [Test] + public void ShouldUseSpecifiedSourceBranchesForFeature() + { + const string text = @" +next-version: 2.0.0 +branches: + feature: + mode: ContinuousDeployment + source-branches: ['develop', 'release'] + label: dev"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.Branches["feature"].SourceBranches.ShouldBe(["develop", "release"]); + } + + [Test] + public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForFeature() + { + const string text = @" +next-version: 2.0.0 +branches: + feature: + mode: ContinuousDeployment + label: dev"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.Branches["feature"].SourceBranches.ShouldBe( + ["develop", MainBranch, "release", "support", "hotfix"]); + } + + [Test] + public void ShouldNotOverrideAnythingWhenOverrideConfigIsEmpty() + { + const string text = @" +next-version: 1.2.3 +tag-prefix: custom-tag-prefix-from-yml"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + + var expectedConfig = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.3") + .WithTagPrefix("custom-tag-prefix-from-yml") + .Build(); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.AssemblyVersioningScheme.ShouldBe(expectedConfig.AssemblyVersioningScheme); + configuration.AssemblyFileVersioningScheme.ShouldBe(expectedConfig.AssemblyFileVersioningScheme); + configuration.AssemblyInformationalFormat.ShouldBe(expectedConfig.AssemblyInformationalFormat); + configuration.AssemblyVersioningFormat.ShouldBe(expectedConfig.AssemblyVersioningFormat); + configuration.AssemblyFileVersioningFormat.ShouldBe(expectedConfig.AssemblyFileVersioningFormat); + configuration.TagPrefix.ShouldBe(expectedConfig.TagPrefix); + configuration.NextVersion.ShouldBe(expectedConfig.NextVersion); + configuration.MajorVersionBumpMessage.ShouldBe(expectedConfig.MajorVersionBumpMessage); + configuration.MinorVersionBumpMessage.ShouldBe(expectedConfig.MinorVersionBumpMessage); + configuration.PatchVersionBumpMessage.ShouldBe(expectedConfig.PatchVersionBumpMessage); + configuration.NoBumpMessage.ShouldBe(expectedConfig.NoBumpMessage); + configuration.TagPreReleaseWeight.ShouldBe(expectedConfig.TagPreReleaseWeight); + configuration.CommitDateFormat.ShouldBe(expectedConfig.CommitDateFormat); + configuration.MergeMessageFormats.ShouldBe(expectedConfig.MergeMessageFormats); + configuration.UpdateBuildNumber.ShouldBe(expectedConfig.UpdateBuildNumber); + + configuration.Ignore.ShouldBeEquivalentTo(expectedConfig.Ignore); + + configuration.Branches.Keys.ShouldBe(expectedConfig.Branches.Keys); + + foreach (var branch in configuration.Branches.Keys) + { + configuration.Branches[branch].ShouldBeEquivalentTo(expectedConfig.Branches[branch]); + } + } + + [Test] + public void ShouldUseDefaultTagPrefixWhenNotSetInConfigFile() + { + const string text = ""; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.TagPrefix.ShouldBe(ConfigurationConstants.DefaultTagPrefix); + } + + [Test] + public void ShouldUseTagPrefixFromConfigFileWhenProvided() + { + const string text = "tag-prefix: custom-tag-prefix-from-yml"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath); + + configuration.TagPrefix.ShouldBe("custom-tag-prefix-from-yml"); + } + + [Test] + public void ShouldOverrideTagPrefixWithOverrideConfigValue([Values] bool tagPrefixSetAtYmlFile) + { + var text = tagPrefixSetAtYmlFile ? "tag-prefix: custom-tag-prefix-from-yml" : ""; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var overrideConfiguration = new Dictionary + { + { "tag-prefix", "tag-prefix-from-override-configuration" } + }; + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath, overrideConfiguration); + + configuration.TagPrefix.ShouldBe("tag-prefix-from-override-configuration"); + } + + [Test] + public void ShouldNotOverrideDefaultTagPrefixWhenNotSetInOverrideConfig() + { + const string text = ""; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var overrideConfiguration = new Dictionary + { + { "next-version", "1.0.0" } + }; + + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath, overrideConfiguration); + + configuration.TagPrefix.ShouldBe(ConfigurationConstants.DefaultTagPrefix); + } + + [Test] + public void ShouldNotOverrideTagPrefixFromConfigFileWhenNotSetInOverrideConfig() + { + const string text = "tag-prefix: custom-tag-prefix-from-yml"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var overrideConfiguration = new Dictionary + { + { "next-version", "1.0.0" } + }; + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath, overrideConfiguration); + + configuration.TagPrefix.ShouldBe("custom-tag-prefix-from-yml"); + } + + [Test] + public void ShouldOverrideTagPrefixFromConfigFileWhenSetInOverrideConfig() + { + const string text = "tag-prefix: custom-tag-prefix-from-yml"; + using var _ = this.fileSystem.SetupConfigFile(path: this.repoPath, text: text); + var overrideConfiguration = new Dictionary + { + { "tag-prefix", "custom-tag-prefix-from-console" } + }; + var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath, overrideConfiguration); + + configuration.TagPrefix.ShouldBe("custom-tag-prefix-from-console"); + } +} diff --git a/src/GitVersion.Configuration.Tests/Configuration/Extensions.cs b/src/GitVersion.Configuration.Tests/Configuration/Extensions.cs new file mode 100644 index 0000000000..96db0f145c --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Configuration/Extensions.cs @@ -0,0 +1,20 @@ +using GitVersion.Extensions; +using GitVersion.Helpers; + +namespace GitVersion.Configuration.Tests.Configuration; + +public static class Extensions +{ + public static IDisposable SetupConfigFile(this IFileSystem fileSystem, string? path = null, string fileName = ConfigurationFileLocator.DefaultFileName, string text = "") + { + if (path.IsNullOrEmpty()) + { + path = PathHelper.GetRepositoryTempPath(); + } + + var fullPath = PathHelper.Combine(path, fileName); + fileSystem.WriteAllText(fullPath, text); + + return Disposable.Create(fullPath, () => fileSystem.Delete(fullPath)); + } +} diff --git a/src/GitVersion.Configuration.Tests/Configuration/IgnoreConfigurationTests.cs b/src/GitVersion.Configuration.Tests/Configuration/IgnoreConfigurationTests.cs new file mode 100644 index 0000000000..3cc5e9d43c --- /dev/null +++ b/src/GitVersion.Configuration.Tests/Configuration/IgnoreConfigurationTests.cs @@ -0,0 +1,82 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; +using YamlDotNet.Core; + +namespace GitVersion.Core.Tests.Configuration; + +[TestFixture] +public class IgnoreConfigurationTests : TestBase +{ + private readonly ConfigurationSerializer serializer = new(); + + [Test] + public void CanDeserialize() + { + const string yaml = + """ + ignore: + sha: [b6c0c9fda88830ebcd563e500a5a7da5a1658e98] + commits-before: 2015-10-23T12:23:15 + """; + + var configuration = serializer.ReadConfiguration(yaml); + + configuration.ShouldNotBeNull(); + configuration.Ignore.ShouldNotBeNull(); + configuration.Ignore.Shas.ShouldNotBeEmpty(); + configuration.Ignore.Shas.ShouldBe(["b6c0c9fda88830ebcd563e500a5a7da5a1658e98"]); + configuration.Ignore.Before.ShouldBe(DateTimeOffset.Parse("2015-10-23T12:23:15")); + } + + [Test] + public void ShouldSupportsOtherSequenceFormat() + { + const string yaml = + """ + ignore: + sha: + - b6c0c9fda88830ebcd563e500a5a7da5a1658e98 + - 6c19c7c219ecf8dbc468042baefa73a1b213e8b1 + """; + + var configuration = serializer.ReadConfiguration(yaml); + + configuration.ShouldNotBeNull(); + configuration.Ignore.ShouldNotBeNull(); + configuration.Ignore.Shas.ShouldNotBeEmpty(); + configuration.Ignore.Shas.ShouldBe(["b6c0c9fda88830ebcd563e500a5a7da5a1658e98", "6c19c7c219ecf8dbc468042baefa73a1b213e8b1"]); + } + + [Test] + public void WhenNotInConfigShouldHaveDefaults() + { + const string yaml = "next-version: 1.0"; + + var configuration = serializer.ReadConfiguration(yaml); + + configuration.ShouldNotBeNull(); + configuration.Ignore.ShouldNotBeNull(); + configuration.Ignore.Shas.ShouldBeEmpty(); + configuration.Ignore.Before.ShouldBe(null); + } + + [Test] + public void WhenBadDateFormatShouldFail() + { + const string yaml = + """ + ignore: + commits-before: bad format date + """; + + Should.Throw(() => serializer.ReadConfiguration(yaml)); + } + + [Test] + public void NewInstanceShouldBeEmpty() + { + IIgnoreConfiguration ignoreConfig = new IgnoreConfiguration(); + + ignoreConfig.IsEmpty.ShouldBeTrue(); + } +} diff --git a/src/GitVersion.Configuration.Tests/GitVersion.Configuration.Tests.csproj b/src/GitVersion.Configuration.Tests/GitVersion.Configuration.Tests.csproj new file mode 100644 index 0000000000..2b5ddb0b6c --- /dev/null +++ b/src/GitVersion.Configuration.Tests/GitVersion.Configuration.Tests.csproj @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/GitVersion.Configuration/Attributes/JsonPropertyDefaultAttribute.cs b/src/GitVersion.Configuration/Attributes/JsonPropertyDefaultAttribute.cs new file mode 100644 index 0000000000..375a8ca093 --- /dev/null +++ b/src/GitVersion.Configuration/Attributes/JsonPropertyDefaultAttribute.cs @@ -0,0 +1,45 @@ +namespace GitVersion.Configuration.Attributes; + +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] +public sealed class JsonPropertyDefaultAttribute : JsonAttribute +{ + /// + /// Initializes a new instance of with the specified default property value. + /// + /// The default value of the property. + public JsonPropertyDefaultAttribute(string? value) => Value = value ?? "null"; + + /// + public JsonPropertyDefaultAttribute(bool value) : this(value ? "true" : "false") { } + + /// + /// The Enum value is converted to string, preferring the symbol name over the numeral if possible. + public JsonPropertyDefaultAttribute(SemanticVersionFormat value) : this(value.ToString()) { } + /// + public JsonPropertyDefaultAttribute(AssemblyVersioningScheme value) : this(value.ToString()) { } + /// + public JsonPropertyDefaultAttribute(AssemblyFileVersioningScheme value) : this(value.ToString()) { } + + /// + /// Depending on the Type of the boxed value, the resulting string will be automatically enclosed with single-quotes. If the boxed value is NOT a string and is converted to a string from a numeric , object, array, boolean, or null-only type, then it will NOT be enclosed with single-quotes. + public JsonPropertyDefaultAttribute(object? boxedValue) + { + if (boxedValue is not null) + { + var type = boxedValue.GetType(); + var typedObj = Convert.ChangeType(boxedValue, type); + Value = typedObj.ToString() ?? string.Empty; + if (Value == type.ToString()) + Value = JsonSerializer.Serialize(typedObj, type); + } + else + { + Value = "null"; + } + } + + /// + /// The description of the property. + /// + public string Value { get; } +} diff --git a/src/GitVersion.Configuration/Attributes/JsonPropertyDescriptionAttribute.cs b/src/GitVersion.Configuration/Attributes/JsonPropertyDescriptionAttribute.cs new file mode 100644 index 0000000000..5fdc9de548 --- /dev/null +++ b/src/GitVersion.Configuration/Attributes/JsonPropertyDescriptionAttribute.cs @@ -0,0 +1,14 @@ +#if GITVERSION_CONFIGURATION +namespace GitVersion.Configuration.Attributes; +#elif GITVERSION_OUTPUT +namespace GitVersion.Output.Attributes; +#endif + +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] +public sealed class JsonPropertyDescriptionAttribute(string description) : JsonAttribute +{ + /// + /// The description of the property. + /// + public string Description { get; } = description; +} diff --git a/src/GitVersion.Configuration/Attributes/JsonPropertyFormatAttribute.cs b/src/GitVersion.Configuration/Attributes/JsonPropertyFormatAttribute.cs new file mode 100644 index 0000000000..86cbd6358f --- /dev/null +++ b/src/GitVersion.Configuration/Attributes/JsonPropertyFormatAttribute.cs @@ -0,0 +1,41 @@ +namespace GitVersion.Configuration.Attributes; + +/// +/// The format keyword allows for basic semantic identification of certain kinds of string values that are commonly used. For example, because JSON doesn't have a "DateTime" type, dates need to be encoded as strings. format allows the schema author to indicate that the string value should be interpreted as a date. By default, format is just an annotation and does not affect validation. +/// Optionally, validator implementations can [...] enable format to function as an assertion rather than just an annotation. +/// +/// +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] +public sealed class JsonPropertyFormatAttribute(Format format) : JsonAttribute +{ + /// + /// The format of the string. + /// + public Format Format { get; } = format; +} + +/// +/// Enum bindings for Json.Schema.Formats of JsonSchema.Net 5.2.7 +/// +public enum Format +{ + Date, + DateTime, + Duration, + Email, + Hostname, + IdnEmail, + IdnHostname, + Ipv4, + Ipv6, + Iri, + IriReference, + JsonPointer, + Regex, + RelativeJsonPointer, + Time, + Uri, + UriReference, + UriTemplate, + Uuid +} diff --git a/src/GitVersion.Configuration/BranchConfiguration.cs b/src/GitVersion.Configuration/BranchConfiguration.cs new file mode 100644 index 0000000000..6547ea51ac --- /dev/null +++ b/src/GitVersion.Configuration/BranchConfiguration.cs @@ -0,0 +1,137 @@ +using GitVersion.Configuration.Attributes; +using GitVersion.Extensions; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal record BranchConfiguration : IBranchConfiguration +{ + [JsonPropertyName("mode")] + [JsonPropertyDescription("The deployment mode for this branch. Can be 'ManualDeployment', 'ContinuousDelivery', 'ContinuousDeployment'.")] + public DeploymentMode? DeploymentMode { get; internal set; } + + [JsonPropertyName("label")] + [JsonPropertyDescription("The label to use for this branch. Use the value {BranchName} or similar as a placeholder to insert a named capture group from RegularExpression (fx. the branch name).")] + public string? Label { get; internal set; } + + [JsonPropertyName("increment")] + [JsonPropertyDescription("The increment strategy for this branch. Can be 'Inherit', 'Patch', 'Minor', 'Major', 'None'.")] + public IncrementStrategy Increment { get; internal set; } + + [JsonIgnore] + IPreventIncrementConfiguration IBranchConfiguration.PreventIncrement => PreventIncrement; + + [JsonPropertyName("prevent-increment")] + [JsonPropertyDescription("The prevent increment configuration section.")] + public PreventIncrementConfiguration PreventIncrement { get; internal set; } = new(); + + [JsonPropertyName("label-number-pattern")] + [JsonPropertyDescription($"The regular expression pattern to use to extract the number from the branch name. Defaults to '{ConfigurationConstants.DefaultLabelNumberPattern}'.")] + [JsonPropertyDefault(ConfigurationConstants.DefaultLabelNumberPattern)] + [JsonPropertyFormat(Format.Regex)] + public string? LabelNumberPattern { get; internal set; } + + [JsonPropertyName("track-merge-target")] + [JsonPropertyDescription("Strategy which will look for tagged merge commits directly off the current branch.")] + public bool? TrackMergeTarget { get; internal set; } + + [JsonPropertyName("track-merge-message")] + [JsonPropertyDescription("This property is a branch related property and gives the user the possibility to control the behavior of whether the merge commit message will be interpreted as a next version or not.")] + public bool? TrackMergeMessage { get; internal set; } + + [JsonPropertyName("commit-message-incrementing")] + [JsonPropertyDescription("Sets whether it should be possible to increment the version with special syntax in the commit message. Can be 'Disabled', 'Enabled' or 'MergeMessageOnly'.")] + public CommitMessageIncrementMode? CommitMessageIncrementing { get; internal set; } + + [JsonPropertyName("regex")] + [JsonPropertyDescription("The regular expression pattern to use to match this branch.")] + [JsonPropertyFormat(Format.Regex)] + public string? RegularExpression { get; internal set; } + + [JsonIgnore] + string? IBranchConfiguration.RegularExpression => RegularExpression; + + [JsonPropertyName("source-branches")] + [JsonPropertyDescription("The source branches for this branch.")] + public HashSet SourceBranches { get; internal set; } = []; + + [JsonIgnore] + IReadOnlyCollection IBranchConfiguration.SourceBranches => SourceBranches; + + [JsonPropertyName("is-source-branch-for")] + [JsonPropertyDescription("The branches that this branch is a source branch.")] + public HashSet IsSourceBranchFor { get; internal set; } = []; + + [JsonIgnore] + IReadOnlyCollection IBranchConfiguration.IsSourceBranchFor => IsSourceBranchFor; + + [JsonPropertyName("tracks-release-branches")] + [JsonPropertyDescription("Indicates this branch configuration represents develop in GitFlow.")] + public bool? TracksReleaseBranches { get; internal set; } + + [JsonPropertyName("is-release-branch")] + [JsonPropertyDescription("Indicates this branch configuration represents a release branch in GitFlow.")] + public bool? IsReleaseBranch { get; internal set; } + + [JsonPropertyName("is-main-branch")] + [JsonPropertyDescription("When using Mainline mode, this indicates that this branch is a mainline. By default main and support/* are mainlines.")] + public bool? IsMainBranch { get; internal set; } + + [JsonPropertyName("pre-release-weight")] + [JsonPropertyDescription("Provides a way to translate the PreReleaseLabel to a number.")] + public int? PreReleaseWeight { get; internal set; } + + public virtual IBranchConfiguration Inherit(IBranchConfiguration configuration) + { + configuration.NotNull(); + + return new BranchConfiguration(this) + { + Increment = Increment == IncrementStrategy.Inherit ? configuration.Increment : Increment, + DeploymentMode = DeploymentMode ?? configuration.DeploymentMode, + Label = Label ?? configuration.Label, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = PreventIncrement.OfMergedBranch ?? configuration.PreventIncrement.OfMergedBranch, + WhenBranchMerged = PreventIncrement.WhenBranchMerged ?? configuration.PreventIncrement.WhenBranchMerged, + WhenCurrentCommitTagged = PreventIncrement.WhenCurrentCommitTagged ?? configuration.PreventIncrement.WhenCurrentCommitTagged + }, + LabelNumberPattern = LabelNumberPattern ?? configuration.LabelNumberPattern, + TrackMergeTarget = TrackMergeTarget ?? configuration.TrackMergeTarget, + TrackMergeMessage = TrackMergeMessage ?? configuration.TrackMergeMessage, + CommitMessageIncrementing = CommitMessageIncrementing ?? configuration.CommitMessageIncrementing, + RegularExpression = RegularExpression ?? configuration.RegularExpression, + TracksReleaseBranches = TracksReleaseBranches ?? configuration.TracksReleaseBranches, + IsReleaseBranch = IsReleaseBranch ?? configuration.IsReleaseBranch, + IsMainBranch = IsMainBranch ?? configuration.IsMainBranch, + PreReleaseWeight = PreReleaseWeight ?? configuration.PreReleaseWeight + }; + } + + public virtual IBranchConfiguration Inherit(EffectiveConfiguration configuration) + { + configuration.NotNull(); + + return new BranchConfiguration(this) + { + Increment = Increment == IncrementStrategy.Inherit ? configuration.Increment : Increment, + DeploymentMode = DeploymentMode ?? configuration.DeploymentMode, + Label = Label ?? configuration.Label, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = PreventIncrement.OfMergedBranch ?? configuration.PreventIncrementOfMergedBranch, + WhenBranchMerged = PreventIncrement.WhenBranchMerged ?? configuration.PreventIncrementWhenBranchMerged, + WhenCurrentCommitTagged = PreventIncrement.WhenCurrentCommitTagged ?? configuration.PreventIncrementWhenCurrentCommitTagged + }, + LabelNumberPattern = LabelNumberPattern ?? configuration.LabelNumberPattern, + TrackMergeTarget = TrackMergeTarget ?? configuration.TrackMergeTarget, + TrackMergeMessage = TrackMergeMessage ?? configuration.TrackMergeMessage, + CommitMessageIncrementing = CommitMessageIncrementing ?? configuration.CommitMessageIncrementing, + RegularExpression = RegularExpression ?? configuration.RegularExpression, + TracksReleaseBranches = TracksReleaseBranches ?? configuration.TracksReleaseBranches, + IsReleaseBranch = IsReleaseBranch ?? configuration.IsReleaseBranch, + IsMainBranch = IsMainBranch ?? configuration.IsMainBranch, + PreReleaseWeight = PreReleaseWeight ?? configuration.PreReleaseWeight + }; + } +} diff --git a/src/GitVersion.Configuration/Builders/BranchConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/BranchConfigurationBuilder.cs new file mode 100644 index 0000000000..d3ac3080dd --- /dev/null +++ b/src/GitVersion.Configuration/Builders/BranchConfigurationBuilder.cs @@ -0,0 +1,190 @@ +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal class BranchConfigurationBuilder +{ + public static BranchConfigurationBuilder New => new(); + + private DeploymentMode? deploymentMode; + private string? label; + private IncrementStrategy increment; + private bool? preventIncrementOfMergedBranch; + private bool? preventIncrementWhenBranchMerged; + private bool? preventIncrementWhenCurrentCommitTagged; + private string? labelNumberPattern; + private bool? trackMergeTarget; + private bool? trackMergeMessage; + private CommitMessageIncrementMode? commitMessageIncrementing; + private string? regularExpression; + private HashSet sourceBranches = []; + private HashSet isSourceBranchFor = []; + private bool? tracksReleaseBranches; + private bool? isReleaseBranch; + private bool? isMainBranch; + private int? preReleaseWeight; + + private BranchConfigurationBuilder() + { + } + + public virtual BranchConfigurationBuilder WithDeploymentMode(DeploymentMode? value) + { + this.deploymentMode = value; + return this; + } + + public virtual BranchConfigurationBuilder WithLabel(string? value) + { + this.label = value; + return this; + } + + public virtual BranchConfigurationBuilder WithIncrement(IncrementStrategy value) + { + this.increment = value; + return this; + } + + public virtual BranchConfigurationBuilder WithPreventIncrementOfMergedBranch(bool? value) + { + this.preventIncrementOfMergedBranch = value; + return this; + } + + public virtual BranchConfigurationBuilder WithPreventIncrementWhenBranchMerged(bool? value) + { + this.preventIncrementWhenBranchMerged = value; + return this; + } + + public virtual BranchConfigurationBuilder WithPreventIncrementWhenCurrentCommitTagged(bool? value) + { + this.preventIncrementWhenCurrentCommitTagged = value; + return this; + } + + public virtual BranchConfigurationBuilder WithLabelNumberPattern(string? value) + { + this.labelNumberPattern = value; + return this; + } + + public virtual BranchConfigurationBuilder WithTrackMergeTarget(bool? value) + { + this.trackMergeTarget = value; + return this; + } + + public virtual BranchConfigurationBuilder WithTrackMergeMessage(bool? value) + { + this.trackMergeMessage = value; + return this; + } + + public virtual BranchConfigurationBuilder WithCommitMessageIncrementing(CommitMessageIncrementMode? value) + { + this.commitMessageIncrementing = value; + return this; + } + + public virtual BranchConfigurationBuilder WithRegularExpression(string? value) + { + this.regularExpression = value; + return this; + } + + public virtual BranchConfigurationBuilder WithSourceBranches(IEnumerable values) + { + WithSourceBranches(values.ToArray()); + return this; + } + + public virtual BranchConfigurationBuilder WithSourceBranches(params string[] values) + { + this.sourceBranches = [.. values]; + return this; + } + + public virtual BranchConfigurationBuilder WithIsSourceBranchFor(IEnumerable values) + { + WithIsSourceBranchFor(values.ToArray()); + return this; + } + + public virtual BranchConfigurationBuilder WithIsSourceBranchFor(params string[] values) + { + this.isSourceBranchFor = [.. values]; + return this; + } + + public virtual BranchConfigurationBuilder WithTracksReleaseBranches(bool? value) + { + this.tracksReleaseBranches = value; + return this; + } + + public virtual BranchConfigurationBuilder WithIsReleaseBranch(bool? value) + { + this.isReleaseBranch = value; + return this; + } + + public virtual BranchConfigurationBuilder WithIsMainBranch(bool? value) + { + this.isMainBranch = value; + return this; + } + + public virtual BranchConfigurationBuilder WithPreReleaseWeight(int? value) + { + this.preReleaseWeight = value; + return this; + } + + public virtual BranchConfigurationBuilder WithConfiguration(IBranchConfiguration value) + { + WithDeploymentMode(value.DeploymentMode); + WithLabel(value.Label); + WithIncrement(value.Increment); + WithPreventIncrementOfMergedBranch(value.PreventIncrement.OfMergedBranch); + WithPreventIncrementWhenBranchMerged(value.PreventIncrement.WhenBranchMerged); + WithPreventIncrementWhenCurrentCommitTagged(value.PreventIncrement.WhenCurrentCommitTagged); + WithLabelNumberPattern(value.LabelNumberPattern); + WithTrackMergeTarget(value.TrackMergeTarget); + WithTrackMergeMessage(value.TrackMergeMessage); + WithCommitMessageIncrementing(value.CommitMessageIncrementing); + WithRegularExpression(value.RegularExpression); + WithTracksReleaseBranches(value.TracksReleaseBranches); + WithIsReleaseBranch(value.IsReleaseBranch); + WithIsMainBranch(value.IsMainBranch); + WithPreReleaseWeight(value.PreReleaseWeight); + WithSourceBranches(value.SourceBranches); + WithIsSourceBranchFor(value.IsSourceBranchFor); + return this; + } + + public IBranchConfiguration Build() => new BranchConfiguration + { + DeploymentMode = deploymentMode, + Label = label, + Increment = increment, + RegularExpression = regularExpression, + TracksReleaseBranches = tracksReleaseBranches, + TrackMergeTarget = trackMergeTarget, + TrackMergeMessage = trackMergeMessage, + CommitMessageIncrementing = commitMessageIncrementing, + IsMainBranch = isMainBranch, + IsReleaseBranch = isReleaseBranch, + LabelNumberPattern = labelNumberPattern, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = preventIncrementOfMergedBranch, + WhenBranchMerged = preventIncrementWhenBranchMerged, + WhenCurrentCommitTagged = preventIncrementWhenCurrentCommitTagged + }, + PreReleaseWeight = preReleaseWeight, + SourceBranches = sourceBranches, + IsSourceBranchFor = isSourceBranchFor + }; +} diff --git a/src/GitVersion.Configuration/Builders/ConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/ConfigurationBuilder.cs new file mode 100644 index 0000000000..c3fc245451 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/ConfigurationBuilder.cs @@ -0,0 +1,6 @@ +namespace GitVersion.Configuration; + +internal sealed class ConfigurationBuilder : ConfigurationBuilderBase +{ + public static ConfigurationBuilder New => new(); +} diff --git a/src/GitVersion.Configuration/Builders/ConfigurationBuilderBase.cs b/src/GitVersion.Configuration/Builders/ConfigurationBuilderBase.cs new file mode 100644 index 0000000000..bef65714d7 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/ConfigurationBuilderBase.cs @@ -0,0 +1,496 @@ +using GitVersion.Extensions; +using GitVersion.Helpers; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal abstract class ConfigurationBuilderBase : IConfigurationBuilder + where TConfigurationBuilder : ConfigurationBuilderBase +{ + private AssemblyVersioningScheme? assemblyVersioningScheme; + private AssemblyFileVersioningScheme? assemblyFileVersioningScheme; + private string? assemblyInformationalFormat; + private string? assemblyVersioningFormat; + private string? assemblyFileVersioningFormat; + private string? tagPrefix; + private string? versionInBranchPattern; + private string? nextVersion; + private string? majorVersionBumpMessage; + private string? minorVersionBumpMessage; + private string? patchVersionBumpMessage; + private string? noBumpMessage; + private int? tagPreReleaseWeight; + private IgnoreConfiguration ignore; + private string? commitDateFormat; + private bool updateBuildNumber; + private SemanticVersionFormat semanticVersionFormat; + private VersionStrategies[] versionStrategies; + private Dictionary mergeMessageFormats = []; + private readonly List> overrides = []; + private readonly Dictionary branchConfigurationBuilders = []; + private DeploymentMode? versioningMode; + private string? label; + private IncrementStrategy increment = IncrementStrategy.Inherit; + private bool? preventIncrementOfMergedBranch; + private bool? preventIncrementWhenBranchMerged; + private bool? preventIncrementWhenCurrentCommitTagged; + private string? labelNumberPattern; + private bool? trackMergeTarget; + private bool? trackMergeMessage; + private CommitMessageIncrementMode? commitMessageIncrementing; + private string? regularExpression; + private bool? tracksReleaseBranches; + private bool? isReleaseBranch; + private bool? isMainBranch; + private int? preReleaseWeight; + + protected readonly BranchMetaData MainBranch = new() + { + Name = ConfigurationConstants.MainBranchKey, + RegexPattern = ConfigurationConstants.MainBranchRegex + }; + + protected readonly BranchMetaData DevelopBranch = new() + { + Name = ConfigurationConstants.DevelopBranchKey, + RegexPattern = ConfigurationConstants.DevelopBranchRegex + }; + + protected readonly BranchMetaData ReleaseBranch = new() + { + Name = ConfigurationConstants.ReleaseBranchKey, + RegexPattern = ConfigurationConstants.ReleaseBranchRegex + }; + + protected readonly BranchMetaData FeatureBranch = new() + { + Name = ConfigurationConstants.FeatureBranchKey, + RegexPattern = ConfigurationConstants.FeatureBranchRegex + }; + + protected readonly BranchMetaData PullRequestBranch = new() + { + Name = ConfigurationConstants.PullRequestBranchKey, + RegexPattern = ConfigurationConstants.PullRequestBranchRegex + }; + + protected readonly BranchMetaData HotfixBranch = new() + { + Name = ConfigurationConstants.HotfixBranchKey, + RegexPattern = ConfigurationConstants.HotfixBranchRegex + }; + + protected readonly BranchMetaData SupportBranch = new() + { + Name = ConfigurationConstants.SupportBranchKey, + RegexPattern = ConfigurationConstants.SupportBranchRegex + }; + + protected readonly BranchMetaData UnknownBranch = new() + { + Name = ConfigurationConstants.UnknownBranchKey, + RegexPattern = ConfigurationConstants.UnknownBranchRegex + }; + + protected ConfigurationBuilderBase() + { + if (GetType() != typeof(TConfigurationBuilder)) + { + throw new ArgumentException("The generic type parameter is not equal to the instance type."); + } + } + + public virtual TConfigurationBuilder WithAssemblyVersioningScheme(AssemblyVersioningScheme? value) + { + this.assemblyVersioningScheme = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithAssemblyFileVersioningScheme(AssemblyFileVersioningScheme? value) + { + this.assemblyFileVersioningScheme = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithAssemblyInformationalFormat(string? value) + { + this.assemblyInformationalFormat = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithAssemblyVersioningFormat(string? value) + { + this.assemblyVersioningFormat = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithAssemblyFileVersioningFormat(string? value) + { + this.assemblyFileVersioningFormat = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithTagPrefix(string? value) + { + this.tagPrefix = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithVersionInBranchPattern(string? value) + { + this.versionInBranchPattern = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithNextVersion(string? value) + { + this.nextVersion = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithMajorVersionBumpMessage(string? value) + { + this.majorVersionBumpMessage = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithMinorVersionBumpMessage(string? value) + { + this.minorVersionBumpMessage = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithPatchVersionBumpMessage(string? value) + { + this.patchVersionBumpMessage = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithNoBumpMessage(string? value) + { + this.noBumpMessage = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithTagPreReleaseWeight(int? value) + { + this.tagPreReleaseWeight = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithIgnoreConfiguration(IIgnoreConfiguration value) + { + this.ignore = (IgnoreConfiguration)value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithCommitDateFormat(string? value) + { + this.commitDateFormat = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithUpdateBuildNumber(bool value) + { + this.updateBuildNumber = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithSemanticVersionFormat(SemanticVersionFormat value) + { + this.semanticVersionFormat = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithVersionStrategy(VersionStrategies value) + { + this.versionStrategies = Enum.GetValues() + .Where(element => element != VersionStrategies.None && value.HasFlag(element)) + .ToArray(); + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithVersionStrategies(params VersionStrategies[] values) + { + this.versionStrategies = values; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithMergeMessageFormats(IReadOnlyDictionary value) + { + this.mergeMessageFormats = new(value); + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithoutBranches() + { + this.branchConfigurationBuilders.Clear(); + return (TConfigurationBuilder)this; + } + + public virtual BranchConfigurationBuilder WithBranch(string value) + => this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New); + + public virtual BranchConfigurationBuilder WithBranch(string value, BranchConfigurationBuilder builder) + => this.branchConfigurationBuilders.GetOrAdd(value, () => builder); + + public virtual TConfigurationBuilder WithBranch(string value, Action action) + { + var result = this.branchConfigurationBuilders.GetOrAdd(value, () => BranchConfigurationBuilder.New); + action(result); + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithDeploymentMode(DeploymentMode? value) + { + this.versioningMode = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithLabel(string? value) + { + this.label = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithIncrement(IncrementStrategy value) + { + this.increment = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithPreventIncrementOfMergedBranch(bool? value) + { + this.preventIncrementOfMergedBranch = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithPreventIncrementWhenBranchMerged(bool? value) + { + this.preventIncrementWhenBranchMerged = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithPreventIncrementWhenCurrentCommitTagged(bool? value) + { + this.preventIncrementWhenCurrentCommitTagged = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithLabelNumberPattern(string? value) + { + this.labelNumberPattern = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithTrackMergeTarget(bool? value) + { + this.trackMergeTarget = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithTrackMergeMessage(bool? value) + { + this.trackMergeMessage = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithCommitMessageIncrementing(CommitMessageIncrementMode? value) + { + this.commitMessageIncrementing = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithRegularExpression(string? value) + { + this.regularExpression = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithTracksReleaseBranches(bool? value) + { + this.tracksReleaseBranches = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithIsReleaseBranch(bool? value) + { + this.isReleaseBranch = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithIsMainBranch(bool? value) + { + this.isMainBranch = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithPreReleaseWeight(int? value) + { + this.preReleaseWeight = value; + return (TConfigurationBuilder)this; + } + + public virtual TConfigurationBuilder WithConfiguration(IGitVersionConfiguration value) + { + WithAssemblyVersioningScheme(value.AssemblyVersioningScheme); + WithAssemblyFileVersioningScheme(value.AssemblyFileVersioningScheme); + WithAssemblyInformationalFormat(value.AssemblyInformationalFormat); + WithAssemblyVersioningFormat(value.AssemblyVersioningFormat); + WithAssemblyFileVersioningFormat(value.AssemblyFileVersioningFormat); + WithTagPrefix(value.TagPrefix); + WithVersionInBranchPattern(value.VersionInBranchPattern); + WithNextVersion(value.NextVersion); + WithMajorVersionBumpMessage(value.MajorVersionBumpMessage); + WithMinorVersionBumpMessage(value.MinorVersionBumpMessage); + WithPatchVersionBumpMessage(value.PatchVersionBumpMessage); + WithNoBumpMessage(value.NoBumpMessage); + WithTagPreReleaseWeight(value.TagPreReleaseWeight); + WithIgnoreConfiguration(value.Ignore); + WithCommitDateFormat(value.CommitDateFormat); + WithUpdateBuildNumber(value.UpdateBuildNumber); + WithSemanticVersionFormat(value.SemanticVersionFormat); + WithVersionStrategy(value.VersionStrategy); + WithMergeMessageFormats(value.MergeMessageFormats); + foreach (var (name, branchConfiguration) in value.Branches) + { + WithBranch(name).WithConfiguration(branchConfiguration); + } + WithDeploymentMode(value.DeploymentMode); + WithLabel(value.Label); + WithIncrement(value.Increment); + WithPreventIncrementOfMergedBranch(value.PreventIncrement.OfMergedBranch); + WithPreventIncrementWhenBranchMerged(value.PreventIncrement.WhenBranchMerged); + WithPreventIncrementWhenCurrentCommitTagged(value.PreventIncrement.WhenCurrentCommitTagged); + WithLabelNumberPattern(value.LabelNumberPattern); + WithTrackMergeTarget(value.TrackMergeTarget); + WithTrackMergeMessage(value.TrackMergeMessage); + WithCommitMessageIncrementing(value.CommitMessageIncrementing); + WithRegularExpression(value.RegularExpression); + WithTracksReleaseBranches(value.TracksReleaseBranches); + WithIsReleaseBranch(value.IsReleaseBranch); + WithIsMainBranch(value.IsMainBranch); + WithPreReleaseWeight(value.PreReleaseWeight); + return (TConfigurationBuilder)this; + } + + public void AddOverride(IReadOnlyDictionary value) + { + if (value.Any()) + { + this.overrides.Add(value); + } + } + + public virtual IGitVersionConfiguration Build() + { + Dictionary branches = []; + foreach (var (name, branchConfigurationBuilder) in this.branchConfigurationBuilders) + { + branches.Add(name, (BranchConfiguration)branchConfigurationBuilder.Build()); + } + + IGitVersionConfiguration configuration = new GitVersionConfiguration + { + AssemblyVersioningScheme = this.assemblyVersioningScheme, + AssemblyFileVersioningScheme = this.assemblyFileVersioningScheme, + AssemblyInformationalFormat = this.assemblyInformationalFormat, + AssemblyVersioningFormat = this.assemblyVersioningFormat, + AssemblyFileVersioningFormat = this.assemblyFileVersioningFormat, + TagPrefix = this.tagPrefix, + VersionInBranchPattern = this.versionInBranchPattern, + NextVersion = this.nextVersion, + MajorVersionBumpMessage = this.majorVersionBumpMessage, + MinorVersionBumpMessage = this.minorVersionBumpMessage, + PatchVersionBumpMessage = this.patchVersionBumpMessage, + NoBumpMessage = this.noBumpMessage, + TagPreReleaseWeight = this.tagPreReleaseWeight, + Ignore = this.ignore, + CommitDateFormat = this.commitDateFormat, + UpdateBuildNumber = this.updateBuildNumber, + SemanticVersionFormat = this.semanticVersionFormat, + VersionStrategies = versionStrategies, + Branches = branches, + MergeMessageFormats = this.mergeMessageFormats, + DeploymentMode = this.versioningMode, + Label = this.label, + Increment = this.increment, + RegularExpression = this.regularExpression, + TracksReleaseBranches = this.tracksReleaseBranches, + TrackMergeTarget = this.trackMergeTarget, + TrackMergeMessage = this.trackMergeMessage, + CommitMessageIncrementing = this.commitMessageIncrementing, + IsMainBranch = this.isMainBranch, + IsReleaseBranch = this.isReleaseBranch, + LabelNumberPattern = this.labelNumberPattern, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = this.preventIncrementOfMergedBranch, + WhenBranchMerged = this.preventIncrementWhenBranchMerged, + WhenCurrentCommitTagged = this.preventIncrementWhenCurrentCommitTagged, + }, + PreReleaseWeight = this.preReleaseWeight + }; + + if (this.overrides.Count != 0) + { + ConfigurationHelper configurationHelper = new(configuration); + foreach (var item in this.overrides) + { + configurationHelper.Override(item); + } + configuration = configurationHelper.Configuration; + } + + FinalizeConfiguration(configuration); + ValidateConfiguration(configuration); + + return configuration; + } + + private static void FinalizeConfiguration(IGitVersionConfiguration configuration) + { + foreach (var (name, branchConfiguration) in configuration.Branches) + { + FinalizeBranchConfiguration(configuration, name, branchConfiguration); + } + } + + private static void FinalizeBranchConfiguration(IGitVersionConfiguration configuration, string branchName, + IBranchConfiguration branchConfiguration) + { + var branches = configuration.Branches; + foreach (var targetBranchName in branchConfiguration.IsSourceBranchFor) + { + var targetBranchConfiguration = (BranchConfiguration)branches[targetBranchName]; + targetBranchConfiguration.SourceBranches.Add(branchName); + } + } + + private static void ValidateConfiguration(IGitVersionConfiguration configuration) + { + foreach (var (name, branchConfiguration) in configuration.Branches) + { + var helpUrl = $"{PathHelper.NewLine}See https://gitversion.net/docs/reference/configuration for more info"; + + if (branchConfiguration.RegularExpression == null) + { + throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'regex'{helpUrl}"); + } + + var sourceBranches = branchConfiguration.SourceBranches ?? throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'source-branches'{helpUrl}"); + var missingSourceBranches = sourceBranches.Where(sb => !configuration.Branches.ContainsKey(sb)).ToArray(); + if (missingSourceBranches.Length != 0) + { + throw new ConfigurationException($"Branch configuration '{name}' defines these 'source-branches' that are not configured: '[{string.Join(",", missingSourceBranches)}]'{helpUrl}"); + } + } + } + + protected record BranchMetaData + { + public string Name { get; init; } + + public string RegexPattern { get; init; } + } +} diff --git a/src/GitVersion.Configuration/Builders/EmptyConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/EmptyConfigurationBuilder.cs new file mode 100644 index 0000000000..b5431ee613 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/EmptyConfigurationBuilder.cs @@ -0,0 +1,22 @@ +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal sealed class EmptyConfigurationBuilder : ConfigurationBuilderBase +{ + public static EmptyConfigurationBuilder New => new(); + + private EmptyConfigurationBuilder() + { + GitVersionConfiguration configuration = new() + { + DeploymentMode = DeploymentMode.ContinuousDelivery, + AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch, + AssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch, + CommitDateFormat = "yyyy-MM-dd", + CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, + TagPreReleaseWeight = 0 + }; + WithConfiguration(configuration); + } +} diff --git a/src/GitVersion.Configuration/Builders/GitFlowConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/GitFlowConfigurationBuilder.cs new file mode 100644 index 0000000000..2cba13d408 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/GitFlowConfigurationBuilder.cs @@ -0,0 +1,211 @@ +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal sealed class GitFlowConfigurationBuilder : ConfigurationBuilderBase +{ + public static GitFlowConfigurationBuilder New => new(); + + private GitFlowConfigurationBuilder() + { + WithConfiguration(new GitVersionConfiguration + { + AssemblyFileVersioningScheme = ConfigurationConstants.DefaultAssemblyFileVersioningScheme, + AssemblyVersioningScheme = ConfigurationConstants.DefaultAssemblyVersioningScheme, + CommitDateFormat = ConfigurationConstants.DefaultCommitDateFormat, + MajorVersionBumpMessage = IncrementStrategyFinder.DefaultMajorPattern, + MinorVersionBumpMessage = IncrementStrategyFinder.DefaultMinorPattern, + NoBumpMessage = IncrementStrategyFinder.DefaultNoBumpPattern, + PatchVersionBumpMessage = IncrementStrategyFinder.DefaultPatchPattern, + SemanticVersionFormat = ConfigurationConstants.DefaultSemanticVersionFormat, + VersionStrategies = ConfigurationConstants.DefaultVersionStrategies, + TagPrefix = ConfigurationConstants.DefaultTagPrefix, + VersionInBranchPattern = ConfigurationConstants.DefaultVersionInBranchPattern, + TagPreReleaseWeight = ConfigurationConstants.DefaultTagPreReleaseWeight, + UpdateBuildNumber = ConfigurationConstants.DefaultUpdateBuildNumber, + DeploymentMode = DeploymentMode.ContinuousDelivery, + RegularExpression = string.Empty, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit, + CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = false, + WhenBranchMerged = false, + WhenCurrentCommitTagged = true + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + TracksReleaseBranches = false, + IsReleaseBranch = false, + IsMainBranch = false + }); + + WithBranch(DevelopBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Minor, + RegularExpression = DevelopBranch.RegexPattern, + SourceBranches = [this.MainBranch.Name], + Label = "alpha", + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + TrackMergeTarget = true, + TrackMergeMessage = true, + TracksReleaseBranches = true, + IsMainBranch = false, + IsReleaseBranch = false, + PreReleaseWeight = 0 + }); + + WithBranch(MainBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Patch, + RegularExpression = MainBranch.RegexPattern, + SourceBranches = [], + Label = string.Empty, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + TracksReleaseBranches = false, + IsMainBranch = true, + IsReleaseBranch = false, + PreReleaseWeight = 55000 + }); + + WithBranch(ReleaseBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Minor, + DeploymentMode = DeploymentMode.ManualDeployment, + RegularExpression = ReleaseBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name, + this.SupportBranch.Name, + ], + Label = "beta", + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true, + WhenCurrentCommitTagged = false + }, + TrackMergeTarget = false, + TracksReleaseBranches = false, + IsMainBranch = false, + IsReleaseBranch = true, + PreReleaseWeight = 30000 + }); + + WithBranch(FeatureBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Inherit, + RegularExpression = FeatureBranch.RegexPattern, + DeploymentMode = DeploymentMode.ManualDeployment, + SourceBranches = + [ + this.DevelopBranch.Name, + this.MainBranch.Name, + this.ReleaseBranch.Name, + this.SupportBranch.Name, + this.HotfixBranch.Name + ], + Label = ConfigurationConstants.BranchNamePlaceholder, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + TrackMergeMessage = true, + IsMainBranch = false, + PreReleaseWeight = 30000 + }); + + WithBranch(PullRequestBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Inherit, + RegularExpression = PullRequestBranch.RegexPattern, + DeploymentMode = DeploymentMode.ContinuousDelivery, + SourceBranches = + [ + this.DevelopBranch.Name, + this.MainBranch.Name, + this.ReleaseBranch.Name, + this.FeatureBranch.Name, + this.SupportBranch.Name, + this.HotfixBranch.Name + ], + Label = "PullRequest", + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true, + WhenCurrentCommitTagged = false + }, + LabelNumberPattern = ConfigurationConstants.DefaultLabelNumberPattern, + TrackMergeMessage = true, + PreReleaseWeight = 30000 + }); + + WithBranch(HotfixBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Inherit, + RegularExpression = HotfixBranch.RegexPattern, + DeploymentMode = DeploymentMode.ManualDeployment, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + SourceBranches = + [ + this.MainBranch.Name, + this.SupportBranch.Name, + ], + Label = "beta", + IsReleaseBranch = true, + IsMainBranch = false, + PreReleaseWeight = 30000 + }); + + WithBranch(SupportBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Patch, + RegularExpression = SupportBranch.RegexPattern, + SourceBranches = [this.MainBranch.Name], + Label = string.Empty, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true + }, + TrackMergeTarget = false, + TracksReleaseBranches = false, + IsMainBranch = true, + IsReleaseBranch = false, + PreReleaseWeight = 55000 + }); + + WithBranch(UnknownBranch.Name).WithConfiguration(new BranchConfiguration + { + RegularExpression = UnknownBranch.RegexPattern, + DeploymentMode = DeploymentMode.ManualDeployment, + Increment = IncrementStrategy.Inherit, + SourceBranches = + [ + this.MainBranch.Name, + this.DevelopBranch.Name, + this.ReleaseBranch.Name, + this.FeatureBranch.Name, + this.PullRequestBranch.Name, + this.HotfixBranch.Name, + this.SupportBranch.Name + ], + Label = ConfigurationConstants.BranchNamePlaceholder, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = true + }, + IsMainBranch = false, + }); + } +} diff --git a/src/GitVersion.Configuration/Builders/GitHubFlowConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/GitHubFlowConfigurationBuilder.cs new file mode 100644 index 0000000000..3b67f085f8 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/GitHubFlowConfigurationBuilder.cs @@ -0,0 +1,149 @@ +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal sealed class GitHubFlowConfigurationBuilder : ConfigurationBuilderBase +{ + public static GitHubFlowConfigurationBuilder New => new(); + + private GitHubFlowConfigurationBuilder() + { + WithConfiguration(new GitVersionConfiguration + { + AssemblyFileVersioningScheme = ConfigurationConstants.DefaultAssemblyFileVersioningScheme, + AssemblyVersioningScheme = ConfigurationConstants.DefaultAssemblyVersioningScheme, + CommitDateFormat = ConfigurationConstants.DefaultCommitDateFormat, + MajorVersionBumpMessage = IncrementStrategyFinder.DefaultMajorPattern, + MinorVersionBumpMessage = IncrementStrategyFinder.DefaultMinorPattern, + NoBumpMessage = IncrementStrategyFinder.DefaultNoBumpPattern, + PatchVersionBumpMessage = IncrementStrategyFinder.DefaultPatchPattern, + SemanticVersionFormat = ConfigurationConstants.DefaultSemanticVersionFormat, + VersionStrategies = ConfigurationConstants.DefaultVersionStrategies, + TagPrefix = ConfigurationConstants.DefaultTagPrefix, + VersionInBranchPattern = ConfigurationConstants.DefaultVersionInBranchPattern, + TagPreReleaseWeight = ConfigurationConstants.DefaultTagPreReleaseWeight, + UpdateBuildNumber = ConfigurationConstants.DefaultUpdateBuildNumber, + DeploymentMode = DeploymentMode.ContinuousDelivery, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = false, + WhenBranchMerged = false, + WhenCurrentCommitTagged = true + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, + RegularExpression = string.Empty, + TracksReleaseBranches = false, + IsReleaseBranch = false, + IsMainBranch = false + }); + + WithBranch(MainBranch.Name).WithConfiguration(new BranchConfiguration + { + Label = string.Empty, + Increment = IncrementStrategy.Patch, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + RegularExpression = MainBranch.RegexPattern, + SourceBranches = [], + TracksReleaseBranches = false, + IsReleaseBranch = false, + IsMainBranch = true, + PreReleaseWeight = 55000 + }); + + WithBranch(ReleaseBranch.Name).WithConfiguration(new BranchConfiguration + { + DeploymentMode = DeploymentMode.ManualDeployment, + Label = "beta", + Increment = IncrementStrategy.Patch, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true, + WhenBranchMerged = false, + WhenCurrentCommitTagged = false + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + RegularExpression = ReleaseBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name + ], + TracksReleaseBranches = false, + IsReleaseBranch = true, + IsMainBranch = false, + PreReleaseWeight = 30000 + }); + + WithBranch(FeatureBranch.Name).WithConfiguration(new BranchConfiguration + { + DeploymentMode = DeploymentMode.ManualDeployment, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + RegularExpression = FeatureBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name, + this.ReleaseBranch.Name + ], + TrackMergeMessage = true, + IsMainBranch = false, + PreReleaseWeight = 30000 + }); + + WithBranch(PullRequestBranch.Name).WithConfiguration(new BranchConfiguration + { + DeploymentMode = DeploymentMode.ContinuousDelivery, + Label = "PullRequest", + Increment = IncrementStrategy.Inherit, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true, + WhenCurrentCommitTagged = false + }, + LabelNumberPattern = ConfigurationConstants.DefaultLabelNumberPattern, + RegularExpression = PullRequestBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name, + this.ReleaseBranch.Name, + this.FeatureBranch.Name + ], + TrackMergeMessage = true, + PreReleaseWeight = 30000 + }); + + WithBranch(UnknownBranch.Name).WithConfiguration(new BranchConfiguration + { + DeploymentMode = DeploymentMode.ManualDeployment, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + RegularExpression = UnknownBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name, + this.ReleaseBranch.Name, + this.FeatureBranch.Name, + this.PullRequestBranch.Name + ], + TrackMergeMessage = false, + IsMainBranch = false + }); + } +} diff --git a/src/GitVersion.Configuration/Builders/IgnoreConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/IgnoreConfigurationBuilder.cs new file mode 100644 index 0000000000..204a83f10e --- /dev/null +++ b/src/GitVersion.Configuration/Builders/IgnoreConfigurationBuilder.cs @@ -0,0 +1,40 @@ +namespace GitVersion.Configuration; + +internal sealed class IgnoreConfigurationBuilder +{ + public static IgnoreConfigurationBuilder New => new(); + + private DateTimeOffset? before; + + private HashSet shas = []; + + public IgnoreConfigurationBuilder WithBefore(DateTimeOffset? value) + { + this.before = value; + return this; + } + + public IgnoreConfigurationBuilder WithShas(IEnumerable values) + { + WithShas(new HashSet(values)); + return this; + } + + public IgnoreConfigurationBuilder WithShas(params string[] values) + { + WithShas(new HashSet(values)); + return this; + } + + public IgnoreConfigurationBuilder WithShas(HashSet value) + { + this.shas = value; + return this; + } + + public IIgnoreConfiguration Build() => new IgnoreConfiguration + { + Before = before, + Shas = shas + }; +} diff --git a/src/GitVersion.Configuration/Builders/TrunkBasedConfigurationBuilder.cs b/src/GitVersion.Configuration/Builders/TrunkBasedConfigurationBuilder.cs new file mode 100644 index 0000000000..c6e5047b67 --- /dev/null +++ b/src/GitVersion.Configuration/Builders/TrunkBasedConfigurationBuilder.cs @@ -0,0 +1,141 @@ +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal sealed class TrunkBasedConfigurationBuilder : ConfigurationBuilderBase +{ + public static TrunkBasedConfigurationBuilder New => new(); + + private TrunkBasedConfigurationBuilder() + { + WithConfiguration(new GitVersionConfiguration() + { + AssemblyFileVersioningScheme = ConfigurationConstants.DefaultAssemblyFileVersioningScheme, + AssemblyVersioningScheme = ConfigurationConstants.DefaultAssemblyVersioningScheme, + CommitDateFormat = ConfigurationConstants.DefaultCommitDateFormat, + MajorVersionBumpMessage = IncrementStrategyFinder.DefaultMajorPattern, + MinorVersionBumpMessage = IncrementStrategyFinder.DefaultMinorPattern, + NoBumpMessage = IncrementStrategyFinder.DefaultNoBumpPattern, + PatchVersionBumpMessage = IncrementStrategyFinder.DefaultPatchPattern, + SemanticVersionFormat = ConfigurationConstants.DefaultSemanticVersionFormat, + VersionStrategies = [ + VersionStrategies.ConfiguredNextVersion, + VersionStrategies.Mainline + ], + TagPrefix = ConfigurationConstants.DefaultTagPrefix, + VersionInBranchPattern = ConfigurationConstants.DefaultVersionInBranchPattern, + TagPreReleaseWeight = ConfigurationConstants.DefaultTagPreReleaseWeight, + UpdateBuildNumber = ConfigurationConstants.DefaultUpdateBuildNumber, + DeploymentMode = DeploymentMode.ContinuousDelivery, + RegularExpression = string.Empty, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit, + CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = false, + WhenBranchMerged = false, + WhenCurrentCommitTagged = true + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + TracksReleaseBranches = false, + IsReleaseBranch = false, + IsMainBranch = false + }); + + WithBranch(MainBranch.Name).WithConfiguration(new BranchConfiguration() + { + DeploymentMode = DeploymentMode.ContinuousDeployment, + Label = string.Empty, + Increment = IncrementStrategy.Patch, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true + }, + TrackMergeTarget = false, + TrackMergeMessage = true, + RegularExpression = MainBranch.RegexPattern, + SourceBranches = [], + TracksReleaseBranches = false, + IsReleaseBranch = false, + IsMainBranch = true, + PreReleaseWeight = 55000 + }); + + WithBranch(FeatureBranch.Name).WithConfiguration(new BranchConfiguration() + { + DeploymentMode = DeploymentMode.ContinuousDelivery, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Minor, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + RegularExpression = FeatureBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name + ], + TrackMergeMessage = true, + IsMainBranch = false, + PreReleaseWeight = 30000 + }); + + WithBranch(HotfixBranch.Name).WithConfiguration(new BranchConfiguration() + { + DeploymentMode = DeploymentMode.ContinuousDelivery, + Label = ConfigurationConstants.BranchNamePlaceholder, + Increment = IncrementStrategy.Patch, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + RegularExpression = HotfixBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name + ], + IsReleaseBranch = true, + IsMainBranch = false, + PreReleaseWeight = 30000 + }); + + WithBranch(PullRequestBranch.Name).WithConfiguration(new BranchConfiguration + { + DeploymentMode = DeploymentMode.ContinuousDelivery, + Label = "PullRequest", + Increment = IncrementStrategy.Inherit, + PreventIncrement = new PreventIncrementConfiguration() + { + OfMergedBranch = true, + WhenCurrentCommitTagged = false + }, + LabelNumberPattern = ConfigurationConstants.DefaultLabelNumberPattern, + RegularExpression = PullRequestBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name, + this.FeatureBranch.Name, + this.HotfixBranch.Name, + ], + TrackMergeMessage = true, + PreReleaseWeight = 30000 + }); + + WithBranch(UnknownBranch.Name).WithConfiguration(new BranchConfiguration + { + Increment = IncrementStrategy.Patch, + PreventIncrement = new PreventIncrementConfiguration() + { + WhenCurrentCommitTagged = false + }, + RegularExpression = UnknownBranch.RegexPattern, + SourceBranches = + [ + this.MainBranch.Name + ], + PreReleaseWeight = 30000 + }); + } +} diff --git a/src/GitVersion.Configuration/ConfigurationException.cs b/src/GitVersion.Configuration/ConfigurationException.cs new file mode 100644 index 0000000000..971809ace9 --- /dev/null +++ b/src/GitVersion.Configuration/ConfigurationException.cs @@ -0,0 +1,22 @@ +namespace GitVersion.Configuration; + +[Serializable] +public class ConfigurationException : GitVersionException +{ + public ConfigurationException(string msg) + : base(msg) + { + } + + public ConfigurationException(string message, Exception innerException) : base(message, innerException) + { + } + + public ConfigurationException(string messageFormat, params object[] args) : base(messageFormat, args) + { + } + + public ConfigurationException() + { + } +} diff --git a/src/GitVersion.Configuration/ConfigurationFileLocator.cs b/src/GitVersion.Configuration/ConfigurationFileLocator.cs new file mode 100644 index 0000000000..6d23ac35c5 --- /dev/null +++ b/src/GitVersion.Configuration/ConfigurationFileLocator.cs @@ -0,0 +1,76 @@ +using GitVersion.Extensions; +using GitVersion.Helpers; +using GitVersion.Logging; +using Microsoft.Extensions.Options; + +namespace GitVersion.Configuration; + +internal class ConfigurationFileLocator( + IFileSystem fileSystem, + ILog log, + IOptions options) + : IConfigurationFileLocator +{ + public const string DefaultFileName = "GitVersion.yml"; + public const string DefaultAlternativeFileName = "GitVersion.yaml"; + + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly ILog log = log.NotNull(); + private readonly IOptions options = options.NotNull(); + + private string? ConfigurationFile => options.Value.ConfigurationInfo.ConfigurationFile; + + public void Verify(string? workingDirectory, string? projectRootDirectory) + { + if (Path.IsPathRooted(this.ConfigurationFile)) return; + if (PathHelper.Equal(workingDirectory, projectRootDirectory)) return; + WarnAboutAmbiguousConfigFileSelection(workingDirectory, projectRootDirectory); + } + + public string? GetConfigurationFile(string? directory) + { + if (directory is null) return null; + string?[] candidates = [this.ConfigurationFile, DefaultFileName, DefaultAlternativeFileName]; + var candidatePaths = + from candidate in candidates + where !candidate.IsNullOrWhiteSpace() + select PathHelper.Combine(directory, candidate); + + foreach (var candidatePath in candidatePaths) + { + this.log.Debug($"Trying to find configuration file at '{candidatePath}'"); + if (fileSystem.Exists(candidatePath)) + { + this.log.Info($"Found configuration file at '{candidatePath}'"); + return candidatePath; + } + this.log.Debug($"Configuration file not found at '{candidatePath}'"); + } + + return null; + } + + private void WarnAboutAmbiguousConfigFileSelection(string? workingDirectory, string? projectRootDirectory) + { + var workingConfigFile = GetConfigurationFile(workingDirectory); + var projectRootConfigFile = GetConfigurationFile(projectRootDirectory); + + var hasConfigInWorkingDirectory = workingConfigFile != null; + var hasConfigInProjectRootDirectory = projectRootConfigFile != null; + + if (hasConfigInProjectRootDirectory && hasConfigInWorkingDirectory) + { + throw new WarningException($"Ambiguous configuration file selection from '{workingConfigFile}' and '{projectRootConfigFile}'"); + } + + if (!hasConfigInProjectRootDirectory && !hasConfigInWorkingDirectory) + { + if (this.ConfigurationFile is not (DefaultFileName or DefaultAlternativeFileName)) + { + workingConfigFile = PathHelper.Combine(workingDirectory, this.ConfigurationFile); + projectRootConfigFile = PathHelper.Combine(projectRootDirectory, this.ConfigurationFile); + throw new WarningException($"The configuration file was not found at '{workingConfigFile}' or '{projectRootConfigFile}'"); + } + } + } +} diff --git a/src/GitVersion.Configuration/ConfigurationHelper.cs b/src/GitVersion.Configuration/ConfigurationHelper.cs new file mode 100644 index 0000000000..66e2bd5bea --- /dev/null +++ b/src/GitVersion.Configuration/ConfigurationHelper.cs @@ -0,0 +1,90 @@ +using GitVersion.Extensions; + +namespace GitVersion.Configuration; + +internal class ConfigurationHelper +{ + private static ConfigurationSerializer Serializer => new(); + private string Yaml => this.yaml ??= this.dictionary == null + ? Serializer.Serialize(this.configuration!) + : Serializer.Serialize(this.dictionary); + private string? yaml; + + internal IReadOnlyDictionary Dictionary + { + get + { + if (this.dictionary == null) + { + this.yaml ??= Serializer.Serialize(this.configuration!); + this.dictionary = Serializer.Deserialize>(this.yaml); + } + return this.dictionary; + } + } + private IReadOnlyDictionary? dictionary; + + public IGitVersionConfiguration Configuration => this.configuration ??= Serializer.Deserialize(Yaml); + private IGitVersionConfiguration? configuration; + + internal ConfigurationHelper(string yaml) => this.yaml = yaml.NotNull(); + + internal ConfigurationHelper(IReadOnlyDictionary dictionary) => this.dictionary = dictionary.NotNull(); + + public ConfigurationHelper(IGitVersionConfiguration configuration) => this.configuration = configuration.NotNull(); + + public void Override(IReadOnlyDictionary value) + { + value.NotNull(); + + if (value.Any()) + { + var map = Dictionary.ToDictionary(element => element.Key, element => element.Value); + Merge(map, value); + this.dictionary = map; + this.yaml = null; + this.configuration = null; + } + } + + private static void Merge(IDictionary dictionary, IReadOnlyDictionary anotherDictionary) + { + foreach (var item in dictionary) + { + if (item.Value is IDictionary anotherDictionaryValue) + { + if (anotherDictionary.TryGetValue(item.Key, out var value) && value is IReadOnlyDictionary dictionaryValue) + { + Merge(anotherDictionaryValue, dictionaryValue); + } + } + else if (item.Value is null or string or IList) + { + if (anotherDictionary.TryGetValue(item.Key, out var value)) + { + dictionary[item.Key] = value; + } + } + } + + foreach (var item in anotherDictionary) + { + if (item.Value is IReadOnlyDictionary dictionaryValue) + { + if (!dictionary.ContainsKey(item.Key)) + { + Dictionary anotherDictionaryValue = []; + Merge(anotherDictionaryValue, dictionaryValue); + dictionary.Add(item.Key, anotherDictionaryValue); + } + } + else if (item.Value is null or string or IList) + { + if (!dictionary.ContainsKey(item.Key)) + { + dictionary.Add(item.Key, item.Value); + } + } + } + } +} diff --git a/src/GitVersion.Configuration/ConfigurationProvider.cs b/src/GitVersion.Configuration/ConfigurationProvider.cs new file mode 100644 index 0000000000..daf2fc1a28 --- /dev/null +++ b/src/GitVersion.Configuration/ConfigurationProvider.cs @@ -0,0 +1,92 @@ +using GitVersion.Configuration.Workflows; +using GitVersion.Extensions; +using Microsoft.Extensions.Options; +using YamlDotNet.Core; + +namespace GitVersion.Configuration; + +internal class ConfigurationProvider( + IConfigurationFileLocator configFileLocator, + IFileSystem fileSystem, + IConfigurationSerializer configurationSerializer, + IOptions options) + : IConfigurationProvider +{ + private readonly IConfigurationFileLocator configFileLocator = configFileLocator.NotNull(); + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly IConfigurationSerializer configurationSerializer = configurationSerializer.NotNull(); + private readonly IOptions options = options.NotNull(); + + public IGitVersionConfiguration Provide(IReadOnlyDictionary? overrideConfiguration) + { + var gitVersionOptions = this.options.Value; + var workingDirectory = gitVersionOptions.WorkingDirectory; + var projectRootDirectory = workingDirectory.FindGitDir()?.WorkingTreeDirectory; + + var configurationFile = this.configFileLocator.GetConfigurationFile(workingDirectory) + ?? this.configFileLocator.GetConfigurationFile(projectRootDirectory); + + return configurationFile is not null + ? ProvideConfiguration(configurationFile, overrideConfiguration) + : ProvideForDirectory(null, overrideConfiguration); + } + + internal IGitVersionConfiguration ProvideForDirectory(string? workingDirectory, + IReadOnlyDictionary? overrideConfiguration = null) + { + var configFilePath = this.configFileLocator.GetConfigurationFile(workingDirectory); + return ProvideConfiguration(configFilePath, overrideConfiguration); + } + + private IGitVersionConfiguration ProvideConfiguration(string? configFile, + IReadOnlyDictionary? overrideConfiguration = null) + { + var overrideConfigurationFromFile = ReadOverrideConfiguration(configFile); + + var workflow = GetWorkflow(overrideConfiguration, overrideConfigurationFromFile); + + IConfigurationBuilder configurationBuilder = (workflow is null) + ? GitFlowConfigurationBuilder.New + : ConfigurationBuilder.New; + + var overrideConfigurationFromWorkflow = WorkflowManager.GetOverrideConfiguration(workflow); + foreach (var item in new[] { overrideConfigurationFromWorkflow, overrideConfigurationFromFile, overrideConfiguration }) + { + if (item is not null) configurationBuilder.AddOverride(item); + } + + try + { + return configurationBuilder.Build(); + } + catch (YamlException exception) + { + var baseException = exception.GetBaseException(); + throw new WarningException( + $"Could not build the configuration instance because following exception occurred: '{baseException.Message}' " + + "Please ensure that the /overrideconfig parameters are correct and the configuration file is in the correct format." + ); + } + } + + private IReadOnlyDictionary? ReadOverrideConfiguration(string? configFilePath) + { + if (configFilePath == null || !fileSystem.Exists(configFilePath)) return null; + var content = fileSystem.ReadAllText(configFilePath); + return configurationSerializer.Deserialize>(content); + } + + private static string? GetWorkflow(IReadOnlyDictionary? overrideConfiguration, IReadOnlyDictionary? overrideConfigurationFromFile) + { + string? workflow = null; + foreach (var item in new[] { overrideConfigurationFromFile, overrideConfiguration }) + { + if (item?.TryGetValue("workflow", out object? value) == true && value != null) + { + workflow = (string)value; + } + } + + return workflow; + } +} diff --git a/src/GitVersion.Configuration/ConfigurationSerializer.cs b/src/GitVersion.Configuration/ConfigurationSerializer.cs new file mode 100644 index 0000000000..75b30caddd --- /dev/null +++ b/src/GitVersion.Configuration/ConfigurationSerializer.cs @@ -0,0 +1,41 @@ +using YamlDotNet.Serialization; +using YamlDotNet.Serialization.NamingConventions; +using YamlDotNet.Serialization.TypeInspectors; + +namespace GitVersion.Configuration; + +internal class ConfigurationSerializer : IConfigurationSerializer +{ + private static IDeserializer Deserializer => new DeserializerBuilder() + .WithNamingConvention(HyphenatedNamingConvention.Instance) + .WithTypeInspector(inspector => new JsonPropertyNameInspector(inspector)) + .Build(); + + private static ISerializer Serializer => new SerializerBuilder() + .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull) + .WithTypeInspector(inspector => new JsonPropertyNameInspector(inspector)) + .WithNamingConvention(HyphenatedNamingConvention.Instance).Build(); + + public T Deserialize(string input) => Deserializer.Deserialize(input); + public string Serialize(object graph) => Serializer.Serialize(graph); + public IGitVersionConfiguration? ReadConfiguration(string input) => Deserialize(input); + + private sealed class JsonPropertyNameInspector(ITypeInspector innerTypeDescriptor) : TypeInspectorSkeleton + { + public override IEnumerable GetProperties(Type type, object? container) => + innerTypeDescriptor.GetProperties(type, container) + .Where(p => p.GetCustomAttribute() == null) + .Select(p => + { + var descriptor = new PropertyDescriptor(p); + var member = p.GetCustomAttribute(); + if (member is { Name: not null }) + { + descriptor.Name = member.Name; + } + + return (IPropertyDescriptor)descriptor; + }) + .OrderBy(p => p.Order); + } +} diff --git a/src/GitVersion.Configuration/GitVersion.Configuration.csproj b/src/GitVersion.Configuration/GitVersion.Configuration.csproj new file mode 100644 index 0000000000..9047c953a2 --- /dev/null +++ b/src/GitVersion.Configuration/GitVersion.Configuration.csproj @@ -0,0 +1,37 @@ + + + + GITVERSION_CONFIGURATION + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/GitVersion.Configuration/GitVersionConfiguration.cs b/src/GitVersion.Configuration/GitVersionConfiguration.cs new file mode 100644 index 0000000000..1c2360d3a7 --- /dev/null +++ b/src/GitVersion.Configuration/GitVersionConfiguration.cs @@ -0,0 +1,160 @@ +using System.Globalization; +using System.Text.RegularExpressions; +using GitVersion.Configuration.Attributes; +using GitVersion.Extensions; +using GitVersion.VersionCalculation; +using static GitVersion.Configuration.ConfigurationConstants; + +namespace GitVersion.Configuration; + +internal sealed record GitVersionConfiguration : BranchConfiguration, IGitVersionConfiguration +{ + [JsonPropertyName("workflow")] + [JsonPropertyDescription("The base template of the configuration to use. Possible values are: 'GitFlow/v1' or 'GitHubFlow/v1'")] + public string? Workflow { get; internal set; } + + [JsonPropertyName("assembly-versioning-scheme")] + [JsonPropertyDescription($"The scheme to use when setting AssemblyVersion attribute. Can be 'MajorMinorPatchTag', 'MajorMinorPatch', 'MajorMinor', 'Major', 'None'. Defaults to '{NameOfDefaultAssemblyVersioningScheme}'.")] + [JsonPropertyDefault(DefaultAssemblyVersioningScheme)] + public AssemblyVersioningScheme? AssemblyVersioningScheme { get; internal set; } + + [JsonPropertyName("assembly-file-versioning-scheme")] + [JsonPropertyDescription($"The scheme to use when setting AssemblyFileVersion attribute. Can be 'MajorMinorPatchTag', 'MajorMinorPatch', 'MajorMinor', 'Major', 'None'. Defaults to '{NameOfDefaultAssemblyFileVersioningScheme}'.")] + [JsonPropertyDefault(DefaultAssemblyFileVersioningScheme)] + public AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; internal set; } + + [JsonPropertyName("assembly-informational-format")] + [JsonPropertyDescription($"Specifies the format of AssemblyInformationalVersion. Defaults to '{DefaultAssemblyInformationalFormat}'.")] + [JsonPropertyDefault($"'{DefaultAssemblyInformationalFormat}'")] + public string? AssemblyInformationalFormat { get; internal set; } + + [JsonPropertyName("assembly-versioning-format")] + [JsonPropertyDescription("Specifies the format of AssemblyVersion and overwrites the value of assembly-versioning-scheme.")] + public string? AssemblyVersioningFormat { get; internal set; } + + [JsonPropertyName("assembly-file-versioning-format")] + [JsonPropertyDescription("Specifies the format of AssemblyFileVersion and overwrites the value of assembly-file-versioning-scheme.")] + public string? AssemblyFileVersioningFormat { get; internal set; } + + [JsonPropertyName("tag-prefix")] + [JsonPropertyDescription($"A regular expression which is used to trim Git tags before processing. Defaults to '{DefaultTagPrefix}'")] + [JsonPropertyDefault(DefaultTagPrefix)] + [JsonPropertyFormat(Format.Regex)] + public string? TagPrefix { get; internal set; } + + [JsonPropertyName("version-in-branch-pattern")] + [JsonPropertyDescription($"A regular expression which is used to determine the version number in the branch name or commit message (e.g., v1.0.0-LTS). Defaults to '{DefaultVersionInBranchPattern}'.")] + [JsonPropertyDefault(DefaultVersionInBranchPattern)] + [JsonPropertyFormat(Format.Regex)] + public string? VersionInBranchPattern { get; internal set; } + + [JsonIgnore] + public Regex VersionInBranchRegex => versionInBranchRegex ??= new Regex(GetVersionInBranchPattern(), RegexOptions.Compiled); + private Regex? versionInBranchRegex; + + private string GetVersionInBranchPattern() + { + var versionInBranchPattern = VersionInBranchPattern; + if (versionInBranchPattern.IsNullOrEmpty()) versionInBranchPattern = DefaultVersionInBranchPattern; + return $"^{versionInBranchPattern.TrimStart('^')}"; + } + + [JsonPropertyName("next-version")] + [JsonPropertyDescription("Allows you to bump the next version explicitly. Useful for bumping main or a feature branch with breaking changes")] + public string? NextVersion + { + get => nextVersion; + internal set => + nextVersion = int.TryParse(value, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out var major) + ? $"{major}.0" + : value; + } + private string? nextVersion; + + [JsonPropertyName("major-version-bump-message")] + [JsonPropertyDescription($"The regular expression to match commit messages with to perform a major version increment. Defaults to '{IncrementStrategyFinder.DefaultMajorPattern}'")] + [JsonPropertyDefault(IncrementStrategyFinder.DefaultMajorPattern)] + [JsonPropertyFormat(Format.Regex)] + public string? MajorVersionBumpMessage { get; internal set; } + + [JsonPropertyName("minor-version-bump-message")] + [JsonPropertyDescription($"The regular expression to match commit messages with to perform a minor version increment. Defaults to '{IncrementStrategyFinder.DefaultMinorPattern}'")] + [JsonPropertyDefault(IncrementStrategyFinder.DefaultMinorPattern)] + [JsonPropertyFormat(Format.Regex)] + public string? MinorVersionBumpMessage { get; internal set; } + + [JsonPropertyName("patch-version-bump-message")] + [JsonPropertyDescription($"The regular expression to match commit messages with to perform a patch version increment. Defaults to '{IncrementStrategyFinder.DefaultPatchPattern}'")] + [JsonPropertyDefault(IncrementStrategyFinder.DefaultPatchPattern)] + [JsonPropertyFormat(Format.Regex)] + public string? PatchVersionBumpMessage { get; internal set; } + + [JsonPropertyName("no-bump-message")] + [JsonPropertyDescription($"Used to tell GitVersion not to increment when in Mainline development mode. Defaults to '{IncrementStrategyFinder.DefaultNoBumpPattern}'")] + [JsonPropertyDefault(IncrementStrategyFinder.DefaultNoBumpPattern)] + [JsonPropertyFormat(Format.Regex)] + public string? NoBumpMessage { get; internal set; } + + [JsonPropertyName("tag-pre-release-weight")] + [JsonPropertyDescription($"The pre-release weight in case of tagged commits. Defaults to {StringDefaultTagPreReleaseWeight}.")] + public int? TagPreReleaseWeight { get; internal set; } + + [JsonPropertyName("commit-date-format")] + [JsonPropertyDescription($"The format to use when calculating the commit date. Defaults to '{DefaultCommitDateFormat}'. See [Standard Date and Time Format Strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings) and [Custom Date and Time Format Strings](https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings).")] + [JsonPropertyDefault(DefaultCommitDateFormat)] +#if NET7_0_OR_GREATER + [System.Diagnostics.CodeAnalysis.StringSyntax("DateTimeFormat")] // See https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute, https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.codeanalysis.stringsyntaxattribute.datetimeformat?view=net-7.0#system-diagnostics-codeanalysis-stringsyntaxattribute-datetimeformat +#endif + public string? CommitDateFormat { get; internal set; } + + [JsonPropertyName("merge-message-formats")] + [JsonPropertyDescription("Custom merge message formats to enable identification of merge messages that do not follow the built-in conventions.")] + public Dictionary MergeMessageFormats { get; internal set; } = []; + + [JsonIgnore] + IReadOnlyDictionary IGitVersionConfiguration.MergeMessageFormats => MergeMessageFormats; + + [JsonPropertyName("update-build-number")] + [JsonPropertyDescription($"Whether to update the build number in the project file. Defaults to {StringDefaultUpdateBuildNumber}.")] + [JsonPropertyDefault(DefaultUpdateBuildNumber)] + public bool UpdateBuildNumber { get; internal set; } = DefaultUpdateBuildNumber; + + [JsonPropertyName("semantic-version-format")] + [JsonPropertyDescription($"Specifies the semantic version format that is used when parsing the string. Can be 'Strict' or 'Loose'. Defaults to '{StringDefaultSemanticVersionFormat}'.")] + [JsonPropertyDefault(DefaultSemanticVersionFormat)] + public SemanticVersionFormat SemanticVersionFormat { get; internal set; } + + [JsonIgnore] + VersionStrategies IGitVersionConfiguration.VersionStrategy => VersionStrategies.Length == 0 + ? VersionCalculation.VersionStrategies.None : VersionStrategies.Aggregate((one, another) => one | another); + + [JsonPropertyName("strategies")] + [JsonPropertyDescription($"Specifies which version strategies (one or more) will be used to determine the next version. Following values are available: 'ConfiguredNextVersion', 'MergeMessage', 'TaggedCommit', 'TrackReleaseBranches', 'VersionInBranchName' and 'Mainline'.")] + public VersionStrategies[] VersionStrategies { get; internal set; } = []; + + [JsonIgnore] + IReadOnlyDictionary IGitVersionConfiguration.Branches + => Branches.ToDictionary(element => element.Key, element => (IBranchConfiguration)element.Value); + + [JsonPropertyName("branches")] + [JsonPropertyDescription("The header for all the individual branch configuration.")] + public Dictionary Branches { get; internal set; } = []; + + [JsonIgnore] + IIgnoreConfiguration IGitVersionConfiguration.Ignore => Ignore; + + [JsonPropertyName("ignore")] + [JsonPropertyDescription("The header property for the ignore configuration.")] + public IgnoreConfiguration Ignore { get; internal set; } = new(); + + public override IBranchConfiguration Inherit(IBranchConfiguration configuration) => throw new NotSupportedException(); + + public override IBranchConfiguration Inherit(EffectiveConfiguration configuration) => throw new NotSupportedException(); + + public IBranchConfiguration GetEmptyBranchConfiguration() => new BranchConfiguration + { + RegularExpression = string.Empty, + Label = BranchNamePlaceholder, + Increment = IncrementStrategy.Inherit + }; +} diff --git a/src/GitVersion.Configuration/GitVersionConfigurationModule.cs b/src/GitVersion.Configuration/GitVersionConfigurationModule.cs new file mode 100644 index 0000000000..684b0a8b78 --- /dev/null +++ b/src/GitVersion.Configuration/GitVersionConfigurationModule.cs @@ -0,0 +1,15 @@ +using GitVersion.VersionCalculation.Caching; +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.Configuration; + +public class GitVersionConfigurationModule : IGitVersionModule +{ + public void RegisterTypes(IServiceCollection services) + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + } +} diff --git a/src/GitVersion.Configuration/IgnoreConfiguration.cs b/src/GitVersion.Configuration/IgnoreConfiguration.cs new file mode 100644 index 0000000000..9ec97e2b0a --- /dev/null +++ b/src/GitVersion.Configuration/IgnoreConfiguration.cs @@ -0,0 +1,25 @@ +using GitVersion.Configuration.Attributes; + +namespace GitVersion.Configuration; + +internal record IgnoreConfiguration : IIgnoreConfiguration +{ + [JsonIgnore] + public DateTimeOffset? Before { get; init; } + + [JsonPropertyName("commits-before")] + [JsonPropertyDescription("Commits before this date will be ignored. Format: yyyy-MM-ddTHH:mm:ss.")] + [JsonPropertyFormat(Format.DateTime)] + public string? BeforeString + { + get => Before?.ToString("yyyy-MM-ddTHH:mm:ssZ"); + init => Before = value is null ? null : DateTimeOffset.Parse(value); + } + + [JsonIgnore] + IReadOnlySet IIgnoreConfiguration.Shas => Shas; + + [JsonPropertyName("sha")] + [JsonPropertyDescription("A sequence of SHAs to be excluded from the version calculations.")] + public HashSet Shas { get; init; } = []; +} diff --git a/src/GitVersion.Configuration/PreventIncrementConfiguration.cs b/src/GitVersion.Configuration/PreventIncrementConfiguration.cs new file mode 100644 index 0000000000..37661d9762 --- /dev/null +++ b/src/GitVersion.Configuration/PreventIncrementConfiguration.cs @@ -0,0 +1,18 @@ +using GitVersion.Configuration.Attributes; + +namespace GitVersion.Configuration; + +internal class PreventIncrementConfiguration : IPreventIncrementConfiguration +{ + [JsonPropertyName("of-merged-branch")] + [JsonPropertyDescription("Prevent increment when branch merged.")] + public bool? OfMergedBranch { get; set; } + + [JsonPropertyName("when-branch-merged")] + [JsonPropertyDescription("Prevent increment when branch merged.")] + public bool? WhenBranchMerged { get; set; } + + [JsonPropertyName("when-current-commit-tagged")] + [JsonPropertyDescription("This branch related property controls the behavior whether to use the tagged (value set to true) or the incremented (value set to false) semantic version. Defaults to true.")] + public bool? WhenCurrentCommitTagged { get; set; } +} diff --git a/src/GitVersion.Configuration/PublicAPI.Shipped.txt b/src/GitVersion.Configuration/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..91b0e1a43b --- /dev/null +++ b/src/GitVersion.Configuration/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable \ No newline at end of file diff --git a/src/GitVersion.Configuration/PublicAPI.Unshipped.txt b/src/GitVersion.Configuration/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..66f6115d77 --- /dev/null +++ b/src/GitVersion.Configuration/PublicAPI.Unshipped.txt @@ -0,0 +1,43 @@ +#nullable enable +GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Date = 0 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.DateTime = 1 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Duration = 2 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Email = 3 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Hostname = 4 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.IdnEmail = 5 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.IdnHostname = 6 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Ipv4 = 7 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Ipv6 = 8 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Iri = 9 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.IriReference = 10 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.JsonPointer = 11 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Regex = 12 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.RelativeJsonPointer = 13 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Time = 14 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Uri = 15 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.UriReference = 16 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.UriTemplate = 17 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.Format.Uuid = 18 -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.JsonPropertyDefaultAttribute(bool value) -> void +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.JsonPropertyDefaultAttribute(GitVersion.Configuration.AssemblyFileVersioningScheme value) -> void +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.JsonPropertyDefaultAttribute(GitVersion.Configuration.AssemblyVersioningScheme value) -> void +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.JsonPropertyDefaultAttribute(GitVersion.SemanticVersionFormat value) -> void +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.JsonPropertyDefaultAttribute(object? boxedValue) -> void +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.JsonPropertyDefaultAttribute(string? value) -> void +GitVersion.Configuration.Attributes.JsonPropertyDefaultAttribute.Value.get -> string! +GitVersion.Configuration.Attributes.JsonPropertyDescriptionAttribute +GitVersion.Configuration.Attributes.JsonPropertyDescriptionAttribute.Description.get -> string! +GitVersion.Configuration.Attributes.JsonPropertyDescriptionAttribute.JsonPropertyDescriptionAttribute(string! description) -> void +GitVersion.Configuration.Attributes.JsonPropertyFormatAttribute +GitVersion.Configuration.Attributes.JsonPropertyFormatAttribute.Format.get -> GitVersion.Configuration.Attributes.Format +GitVersion.Configuration.Attributes.JsonPropertyFormatAttribute.JsonPropertyFormatAttribute(GitVersion.Configuration.Attributes.Format format) -> void +GitVersion.Configuration.ConfigurationException +GitVersion.Configuration.ConfigurationException.ConfigurationException() -> void +GitVersion.Configuration.ConfigurationException.ConfigurationException(string! message, System.Exception! innerException) -> void +GitVersion.Configuration.ConfigurationException.ConfigurationException(string! messageFormat, params object![]! args) -> void +GitVersion.Configuration.ConfigurationException.ConfigurationException(string! msg) -> void +GitVersion.Configuration.GitVersionConfigurationModule +GitVersion.Configuration.GitVersionConfigurationModule.GitVersionConfigurationModule() -> void +GitVersion.Configuration.GitVersionConfigurationModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void diff --git a/src/GitVersion.Configuration/Workflows/GitFlow/v1.yml b/src/GitVersion.Configuration/Workflows/GitFlow/v1.yml new file mode 100644 index 0000000000..78406ad6a1 --- /dev/null +++ b/src/GitVersion.Configuration/Workflows/GitFlow/v1.yml @@ -0,0 +1,166 @@ +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch +tag-prefix: '[vV]?' +version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* +major-version-bump-message: '\+semver:\s?(breaking|major)' +minor-version-bump-message: '\+semver:\s?(feature|minor)' +patch-version-bump-message: '\+semver:\s?(fix|patch)' +no-bump-message: '\+semver:\s?(none|skip)' +tag-pre-release-weight: 60000 +commit-date-format: yyyy-MM-dd +merge-message-formats: {} +update-build-number: true +semantic-version-format: Strict +strategies: +- Fallback +- ConfiguredNextVersion +- MergeMessage +- TaggedCommit +- TrackReleaseBranches +- VersionInBranchName +branches: + develop: + label: alpha + increment: Minor + prevent-increment: + when-current-commit-tagged: false + track-merge-target: true + track-merge-message: true + regex: ^dev(elop)?(ment)?$ + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: true + is-release-branch: false + is-main-branch: false + pre-release-weight: 0 + main: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + track-merge-target: false + track-merge-message: true + regex: ^master$|^main$ + source-branches: [] + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + release: + mode: ManualDeployment + label: beta + increment: Minor + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + track-merge-target: false + regex: ^releases?[/-](?.+) + source-branches: + - main + - support + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + feature: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + track-merge-message: true + regex: ^features?[/-](?.+) + source-branches: + - develop + - main + - release + - support + - hotfix + is-source-branch-for: [] + is-main-branch: false + pre-release-weight: 30000 + pull-request: + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + label-number-pattern: '[/-](?\d+)' + track-merge-message: true + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - develop + - main + - release + - feature + - support + - hotfix + is-source-branch-for: [] + pre-release-weight: 30000 + hotfix: + mode: ManualDeployment + label: beta + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: ^hotfix(es)?[/-](?.+) + source-branches: + - main + - support + is-source-branch-for: [] + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + support: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + track-merge-target: false + regex: ^support[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: true + regex: (?.+) + source-branches: + - main + - develop + - release + - feature + - pull-request + - hotfix + - support + is-source-branch-for: [] + is-main-branch: false +ignore: + sha: [] +mode: ContinuousDelivery +label: '{BranchName}' +increment: Inherit +prevent-increment: + of-merged-branch: false + when-branch-merged: false + when-current-commit-tagged: true +track-merge-target: false +track-merge-message: true +commit-message-incrementing: Enabled +regex: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false diff --git a/src/GitVersion.Configuration/Workflows/GitHubFlow/v1.yml b/src/GitVersion.Configuration/Workflows/GitHubFlow/v1.yml new file mode 100644 index 0000000000..b6496b4d1d --- /dev/null +++ b/src/GitVersion.Configuration/Workflows/GitHubFlow/v1.yml @@ -0,0 +1,116 @@ +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch +tag-prefix: '[vV]?' +version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* +major-version-bump-message: '\+semver:\s?(breaking|major)' +minor-version-bump-message: '\+semver:\s?(feature|minor)' +patch-version-bump-message: '\+semver:\s?(fix|patch)' +no-bump-message: '\+semver:\s?(none|skip)' +tag-pre-release-weight: 60000 +commit-date-format: yyyy-MM-dd +merge-message-formats: {} +update-build-number: true +semantic-version-format: Strict +strategies: +- Fallback +- ConfiguredNextVersion +- MergeMessage +- TaggedCommit +- TrackReleaseBranches +- VersionInBranchName +branches: + main: + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + tracks-merge-target: false + tracks-merge-message: true + regex: ^master$|^main$ + source-branches: [] + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + release: + mode: ManualDeployment + label: beta + increment: Patch + prevent-increment: + of-merged-branch: true + when-branch-merged: false + when-current-commit-tagged: false + track-merge-target: false + track-merge-message: true + regex: ^releases?[/-](?.+) + source-branches: + - main + is-source-branch-for: [] + tracks-release-branches: false + is-release-branch: true + is-main-branch: false + pre-release-weight: 30000 + feature: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: ^features?[/-](?.+) + source-branches: + - main + - release + is-source-branch-for: [] + track-merge-message: true + is-main-branch: false + pre-release-weight: 30000 + pull-request: + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: false + label-number-pattern: '[/-](?\d+)' + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - main + - release + - feature + is-source-branch-for: [] + track-merge-message: true + pre-release-weight: 30000 + unknown: + mode: ManualDeployment + label: '{BranchName}' + increment: Inherit + prevent-increment: + when-current-commit-tagged: false + regex: (?.+) + source-branches: + - main + - release + - feature + - pull-request + is-source-branch-for: [] + track-merge-message: false + is-main-branch: false +ignore: + sha: [] +mode: ContinuousDelivery +label: '{BranchName}' +increment: Inherit +prevent-increment: + of-merged-branch: false + when-branch-merged: false + when-current-commit-tagged: true +track-merge-target: false +track-merge-message: true +commit-message-incrementing: Enabled +regex: '' +source-branches: [] +is-source-branch-for: [] +tracks-release-branches: false +is-release-branch: false +is-main-branch: false diff --git a/src/GitVersion.Configuration/Workflows/TrunkBased/v1.yml b/src/GitVersion.Configuration/Workflows/TrunkBased/v1.yml new file mode 100644 index 0000000000..cc9b59a1dd --- /dev/null +++ b/src/GitVersion.Configuration/Workflows/TrunkBased/v1.yml @@ -0,0 +1,80 @@ +assembly-versioning-scheme: MajorMinorPatch +assembly-file-versioning-scheme: MajorMinorPatch +tag-prefix: '[vV]?' +version-in-branch-pattern: (?[vV]?\d+(\.\d+)?(\.\d+)?).* +major-version-bump-message: '\+semver:\s?(breaking|major)' +minor-version-bump-message: '\+semver:\s?(feature|minor)' +patch-version-bump-message: '\+semver:\s?(fix|patch)' +no-bump-message: '\+semver:\s?(none|skip)' +tag-pre-release-weight: 60000 +commit-date-format: yyyy-MM-dd +merge-message-formats: {} +update-build-number: true +semantic-version-format: Strict +strategies: +- Mainline +- ConfiguredNextVersion +branches: + main: + mode: ContinuousDeployment + label: '' + increment: Patch + prevent-increment: + of-merged-branch: true + when-current-commit-tagged: true + track-merge-target: false + regex: ^master$|^main$ + source-branches: [] + tracks-release-branches: false + is-release-branch: false + is-main-branch: true + pre-release-weight: 55000 + feature: + increment: Minor + regex: ^features?[/-](?.+) + prevent-increment: + when-current-commit-tagged: false + source-branches: + - main + pre-release-weight: 30000 + hotfix: + increment: Patch + regex: ^hotfix(es)?[/-](?.+) + prevent-increment: + when-current-commit-tagged: false + source-branches: + - main + pre-release-weight: 30000 + pull-request: + mode: ContinuousDelivery + label: PullRequest + increment: Inherit + label-number-pattern: '[/-](?\d+)' + regex: ^(pull|pull\-requests|pr)[/-] + source-branches: + - main + pre-release-weight: 30000 + unknown: + increment: Patch + regex: (?.+) + prevent-increment: + when-current-commit-tagged: false + source-branches: + - main + pre-release-weight: 30000 +ignore: + sha: [] +mode: ContinuousDelivery +label: '{BranchName}' +increment: Inherit +prevent-increment: + of-merged-branch: false + when-branch-merged: false + when-current-commit-tagged: true +track-merge-target: false +track-merge-message: true +commit-message-incrementing: Enabled +regex: '' +tracks-release-branches: false +is-release-branch: false +is-main-branch: false diff --git a/src/GitVersion.Configuration/Workflows/WorkflowManager.cs b/src/GitVersion.Configuration/Workflows/WorkflowManager.cs new file mode 100644 index 0000000000..a9f42ff5d5 --- /dev/null +++ b/src/GitVersion.Configuration/Workflows/WorkflowManager.cs @@ -0,0 +1,28 @@ +using GitVersion.Extensions; + +namespace GitVersion.Configuration.Workflows; + +internal static class WorkflowManager +{ + private static readonly string ResourceNameTemplate = DetermineResourceNameTemplate(); + private static ConfigurationSerializer Serializer => new(); + + private static string DetermineResourceNameTemplate() + { + var fullClassName = typeof(WorkflowManager).FullName!; + var resourceNamePrefix = fullClassName[..(fullClassName.Length - nameof(WorkflowManager).Length - 1)]; + return $"{resourceNamePrefix}.{{0}}.yml"; + } + + public static IReadOnlyDictionary? GetOverrideConfiguration(string? workflow) + { + if (string.IsNullOrEmpty(workflow)) return null; + + var resourceName = GetResourceName(workflow); + var embeddedResource = resourceName.ReadAsStringFromEmbeddedResource(typeof(WorkflowManager).Assembly); + return Serializer.Deserialize>(embeddedResource); + } + + private static string GetResourceName(string workflow) + => ResourceNameTemplate.Replace("{0}", workflow.Replace('/', '.')); +} diff --git a/src/GitVersion.Core.Tests/Model/CommitDateTests.cs b/src/GitVersion.Core.Tests/CommitDateTests.cs similarity index 86% rename from src/GitVersion.Core.Tests/Model/CommitDateTests.cs rename to src/GitVersion.Core.Tests/CommitDateTests.cs index 34b89a9d4d..2b0d94ebd6 100644 --- a/src/GitVersion.Core.Tests/Model/CommitDateTests.cs +++ b/src/GitVersion.Core.Tests/CommitDateTests.cs @@ -1,5 +1,5 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using NUnit.Framework; namespace GitVersion.Core.Tests; @@ -26,8 +26,8 @@ public void CommitDateFormatTest(string format, string expectedOutcome) { BuildMetaData = semanticVersionBuildMetaData // assume time zone is UTC }; - var configuration = new TestEffectiveConfiguration(commitDateFormat: format); - var formatValues = new SemanticVersionFormatValues(semanticVersion, configuration); + var configuration = EmptyConfigurationBuilder.New.WithCommitDateFormat(format).Build(); + var formatValues = new SemanticVersionFormatValues(semanticVersion, configuration, 0); Assert.That(formatValues.CommitDate, Is.EqualTo(expectedOutcome)); } diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigExtensionsTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigExtensionsTests.cs deleted file mode 100644 index afb2f94eec..0000000000 --- a/src/GitVersion.Core.Tests/Configuration/ConfigExtensionsTests.cs +++ /dev/null @@ -1,30 +0,0 @@ -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using NUnit.Framework; -using Shouldly; - -namespace GitVersion.Core.Tests.Configuration; - -[TestFixture] -public class ConfigExtensionsTests : TestBase -{ - [Test] - public void GetReleaseBranchConfigReturnsAllReleaseBranches() - { - var config = new Config() - { - Branches = new Dictionary - { - { "foo", new BranchConfig { Name = "foo" } }, - { "bar", new BranchConfig { Name = "bar", IsReleaseBranch = true } }, - { "baz", new BranchConfig { Name = "baz", IsReleaseBranch = true } } - } - }; - - var result = config.GetReleaseBranchConfig(); - - result.Count.ShouldBe(2); - result.ShouldNotContain(b => b.Key == "foo"); - } -} diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt b/src/GitVersion.Core.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt deleted file mode 100644 index c3749b2a40..0000000000 --- a/src/GitVersion.Core.Tests/Configuration/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt +++ /dev/null @@ -1,119 +0,0 @@ -assembly-versioning-scheme: MajorMinorPatch -assembly-file-versioning-scheme: MajorMinorPatch -mode: ContinuousDelivery -tag-prefix: '[vV]' -continuous-delivery-fallback-tag: ci -major-version-bump-message: '\+semver:\s?(breaking|major)' -minor-version-bump-message: '\+semver:\s?(feature|minor)' -patch-version-bump-message: '\+semver:\s?(fix|patch)' -no-bump-message: '\+semver:\s?(none|skip)' -legacy-semver-padding: 4 -build-metadata-padding: 4 -commits-since-version-source-padding: 4 -tag-pre-release-weight: 60000 -commit-message-incrementing: Enabled -branches: - develop: - mode: ContinuousDeployment - tag: alpha - increment: Minor - prevent-increment-of-merged-branch-version: false - track-merge-target: true - regex: ^dev(elop)?(ment)?$ - source-branches: [] - tracks-release-branches: true - is-release-branch: false - is-mainline: false - pre-release-weight: 0 - main: - mode: ContinuousDelivery - tag: '' - increment: Patch - prevent-increment-of-merged-branch-version: true - track-merge-target: false - regex: ^master$|^main$ - source-branches: - - develop - - release - tracks-release-branches: false - is-release-branch: false - is-mainline: true - pre-release-weight: 55000 - release: - mode: ContinuousDelivery - tag: beta - increment: None - prevent-increment-of-merged-branch-version: true - track-merge-target: false - regex: ^releases?[/-] - source-branches: - - develop - - main - - support - - release - tracks-release-branches: false - is-release-branch: true - is-mainline: false - pre-release-weight: 30000 - feature: - mode: ContinuousDelivery - tag: '{BranchName}' - increment: Inherit - regex: ^features?[/-] - source-branches: - - develop - - main - - release - - feature - - support - - hotfix - pre-release-weight: 30000 - pull-request: - mode: ContinuousDelivery - tag: PullRequest - increment: Inherit - tag-number-pattern: '[/-](?\d+)' - regex: ^(pull|pull\-requests|pr)[/-] - source-branches: - - develop - - main - - release - - feature - - support - - hotfix - pre-release-weight: 30000 - hotfix: - mode: ContinuousDelivery - tag: beta - increment: Patch - prevent-increment-of-merged-branch-version: false - track-merge-target: false - regex: ^hotfix(es)?[/-] - source-branches: - - release - - main - - support - - hotfix - tracks-release-branches: false - is-release-branch: false - is-mainline: false - pre-release-weight: 30000 - support: - mode: ContinuousDelivery - tag: '' - increment: Patch - prevent-increment-of-merged-branch-version: true - track-merge-target: false - regex: ^support[/-] - source-branches: - - main - tracks-release-branches: false - is-release-branch: false - is-mainline: true - pre-release-weight: 55000 -ignore: - sha: [] -increment: Inherit -commit-date-format: yyyy-MM-dd -merge-message-formats: {} -update-build-number: true diff --git a/src/GitVersion.Core.Tests/Configuration/ConfigProviderTests.cs b/src/GitVersion.Core.Tests/Configuration/ConfigProviderTests.cs deleted file mode 100644 index bb7b4cefd8..0000000000 --- a/src/GitVersion.Core.Tests/Configuration/ConfigProviderTests.cs +++ /dev/null @@ -1,506 +0,0 @@ -using System.Runtime.CompilerServices; -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Helpers; -using GitVersion.Logging; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using NUnit.Framework; -using Shouldly; -using YamlDotNet.Serialization; - -namespace GitVersion.Core.Tests; - -[TestFixture] -public class ConfigProviderTests : TestBase -{ - private const string DefaultRepoPath = @"c:\MyGitRepo"; - - private string repoPath; - private IConfigProvider configProvider; - private IFileSystem fileSystem; - - [SetUp] - public void Setup() - { - this.repoPath = DefaultRepoPath; - var options = Options.Create(new GitVersionOptions { WorkingDirectory = repoPath }); - var sp = ConfigureServices(services => services.AddSingleton(options)); - this.configProvider = sp.GetRequiredService(); - this.fileSystem = sp.GetRequiredService(); - - ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); - } - - [Test] - public void OverwritesDefaultsWithProvidedConfig() - { - var defaultConfig = this.configProvider.Provide(this.repoPath); - const string text = @" -next-version: 2.0.0 -branches: - develop: - mode: ContinuousDeployment - tag: dev"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.NextVersion.ShouldBe("2.0.0"); - config.Branches.ShouldNotBeNull(); - config.Branches["develop"].Increment.ShouldBe(defaultConfig.Branches["develop"].Increment); - config.Branches["develop"].VersioningMode.ShouldBe(defaultConfig.Branches["develop"].VersioningMode); - config.Branches["develop"].Tag.ShouldBe("dev"); - } - - [Test] - public void AllBranchesModeWhenUsingMainline() - { - const string text = "mode: Mainline"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - var branches = config.Branches.Select(x => x.Value); - branches.All(branch => branch.VersioningMode == VersioningMode.Mainline).ShouldBe(true); - } - - [Test] - public void CanRemoveTag() - { - const string text = @" -next-version: 2.0.0 -branches: - release: - tag: """""; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.NextVersion.ShouldBe("2.0.0"); - config.Branches["release"].Tag.ShouldBe(string.Empty); - } - - [Test] - public void RegexIsRequired() - { - const string text = @" -next-version: 2.0.0 -branches: - bug: - tag: bugfix"; - SetupConfigFileContent(text); - var ex = Should.Throw(() => this.configProvider.Provide(this.repoPath)); - ex.Message.ShouldBe($"Branch configuration 'bug' is missing required configuration 'regex'{System.Environment.NewLine}" + - "See https://gitversion.net/docs/reference/configuration for more info"); - } - - [Test] - public void SourceBranchIsRequired() - { - const string text = @" -next-version: 2.0.0 -branches: - bug: - regex: 'bug[/-]' - tag: bugfix"; - SetupConfigFileContent(text); - var ex = Should.Throw(() => this.configProvider.Provide(this.repoPath)); - ex.Message.ShouldBe($"Branch configuration 'bug' is missing required configuration 'source-branches'{System.Environment.NewLine}" + - "See https://gitversion.net/docs/reference/configuration for more info"); - } - - [Test(Description = "This test proves the configuration validation will fail early with a helpful message when a branch listed in source-branches has no configuration.")] - public void SourceBranchesValidationShouldFailWhenMatchingBranchConfigurationIsMissing() - { - const string text = @" -branches: - bug: - regex: 'bug[/-]' - tag: bugfix - source-branches: [notconfigured]"; - SetupConfigFileContent(text); - var ex = Should.Throw(() => this.configProvider.Provide(this.repoPath)); - ex.Message.ShouldBe($"Branch configuration 'bug' defines these 'source-branches' that are not configured: '[notconfigured]'{System.Environment.NewLine}" + - "See https://gitversion.net/docs/reference/configuration for more info"); - } - - [Test(Description = "Well-known branches may not be present in the configuration file. This test confirms the validation check succeeds when the source-branches configuration contain these well-known branches.")] - [TestCase(Config.MainBranchKey)] - [TestCase(Config.DevelopBranchKey)] - public void SourceBranchesValidationShouldSucceedForWellKnownBranches(string wellKnownBranchKey) - { - var text = $@" -branches: - bug: - regex: 'bug[/-]' - tag: bugfix - source-branches: [{wellKnownBranchKey}]"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["bug"].SourceBranches.ShouldBe(new List { wellKnownBranchKey }); - } - - [Test] - public void CanProvideConfigForNewBranch() - { - const string text = @" -next-version: 2.0.0 -branches: - bug: - regex: 'bug[/-]' - tag: bugfix - source-branches: []"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["bug"].Regex.ShouldBe("bug[/-]"); - config.Branches["bug"].Tag.ShouldBe("bugfix"); - } - - [Test] - public void MasterConfigReplacedWithMain() - { - const string text = @" -next-version: 2.0.0 -branches: - master: - regex: '^master$|^main$' - tag: beta"; - SetupConfigFileContent(text); - - var config = this.configProvider.Provide(this.repoPath); - - config.Branches[MainBranch].Regex.ShouldBe("^master$|^main$"); - config.Branches[MainBranch].Tag.ShouldBe("beta"); - } - - [Test] - public void MasterConfigReplacedWithMainInSourceBranches() - { - const string text = @" -next-version: 2.0.0 -branches: - breaking: - regex: breaking[/] - mode: ContinuousDeployment - increment: Major - source-branches: ['master'] - is-release-branch: false"; - SetupConfigFileContent(text); - - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["breaking"].Regex.ShouldBe("breaking[/]"); - config.Branches["breaking"].SourceBranches.ShouldHaveSingleItem(); - config.Branches["breaking"].SourceBranches?.ShouldContain(MainBranch); - } - - [Test] - public void NextVersionCanBeInteger() - { - const string text = "next-version: 2"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.NextVersion.ShouldBe("2.0"); - } - - [Test] - public void NextVersionCanHaveEnormousMinorVersion() - { - const string text = "next-version: 2.118998723"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.NextVersion.ShouldBe("2.118998723"); - } - - [Test] - public void NextVersionCanHavePatch() - { - const string text = "next-version: 2.12.654651698"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.NextVersion.ShouldBe("2.12.654651698"); - } - - [Test] - [MethodImpl(MethodImplOptions.NoInlining)] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void CanWriteOutEffectiveConfiguration() - { - var config = this.configProvider.Provide(this.repoPath); - - config.ToString().ShouldMatchApproved(); - } - - [Test] - public void CanUpdateAssemblyInformationalVersioningScheme() - { - const string text = @" -assembly-versioning-scheme: MajorMinor -assembly-file-versioning-scheme: MajorMinorPatch -assembly-informational-format: '{NugetVersion}'"; - - SetupConfigFileContent(text); - - var config = this.configProvider.Provide(this.repoPath); - config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor); - config.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); - config.AssemblyInformationalFormat.ShouldBe("{NugetVersion}"); - } - - [Test] - public void CanUpdateAssemblyInformationalVersioningSchemeWithMultipleVariables() - { - const string text = @" -assembly-versioning-scheme: MajorMinor -assembly-file-versioning-scheme: MajorMinorPatch -assembly-informational-format: '{Major}.{Minor}.{Patch}'"; - - SetupConfigFileContent(text); - - var config = this.configProvider.Provide(this.repoPath); - config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinor); - config.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); - config.AssemblyInformationalFormat.ShouldBe("{Major}.{Minor}.{Patch}"); - } - - - [Test] - public void CanUpdateAssemblyInformationalVersioningSchemeWithFullSemVer() - { - const string text = @"assembly-versioning-scheme: MajorMinorPatch -assembly-file-versioning-scheme: MajorMinorPatch -assembly-informational-format: '{FullSemVer}' -mode: ContinuousDelivery -next-version: 5.3.0 -branches: {}"; - - SetupConfigFileContent(text); - - var config = this.configProvider.Provide(this.repoPath); - config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch); - config.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); - config.AssemblyInformationalFormat.ShouldBe("{FullSemVer}"); - } - - [Test] - public void CanReadDefaultDocument() - { - const string text = ""; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - config.AssemblyVersioningScheme.ShouldBe(AssemblyVersioningScheme.MajorMinorPatch); - config.AssemblyFileVersioningScheme.ShouldBe(AssemblyFileVersioningScheme.MajorMinorPatch); - config.AssemblyInformationalFormat.ShouldBe(null); - config.Branches["develop"].Tag.ShouldBe("alpha"); - config.Branches["release"].Tag.ShouldBe("beta"); - config.TagPrefix.ShouldBe(Config.DefaultTagPrefix); - config.NextVersion.ShouldBe(null); - } - - [Test] - public void VerifyAliases() - { - var config = typeof(Config); - var propertiesMissingAlias = config.GetProperties() - .Where(p => p.GetCustomAttribute() == null) - .Where(p => p.GetCustomAttribute(typeof(YamlMemberAttribute)) == null) - .Select(p => p.Name); - - propertiesMissingAlias.ShouldBeEmpty(); - } - - [Test] - public void NoWarnOnGitVersionYmlFile() - { - SetupConfigFileContent(string.Empty); - - var stringLogger = string.Empty; - void Action(string info) => stringLogger = info; - - var logAppender = new TestLogAppender(Action); - var log = new Log(logAppender); - - var options = Options.Create(new GitVersionOptions { WorkingDirectory = repoPath }); - var sp = ConfigureServices(services => - { - services.AddSingleton(options); - services.AddSingleton(log); - }); - this.configProvider = sp.GetRequiredService(); - - this.configProvider.Provide(this.repoPath); - - stringLogger.Length.ShouldBe(0); - } - - private void SetupConfigFileContent(string text, string fileName = ConfigFileLocator.DefaultFileName) => SetupConfigFileContent(text, fileName, this.repoPath); - - private void SetupConfigFileContent(string text, string fileName, string path) - { - var fullPath = PathHelper.Combine(path, fileName); - this.fileSystem.WriteAllText(fullPath, text); - } - - [Test] - public void ShouldUseSpecifiedSourceBranchesForDevelop() - { - const string text = @" -next-version: 2.0.0 -branches: - develop: - mode: ContinuousDeployment - source-branches: ['develop'] - tag: dev"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["develop"].SourceBranches.ShouldBe(new List { "develop" }); - } - - [Test] - public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForDevelop() - { - const string text = @" -next-version: 2.0.0 -branches: - develop: - mode: ContinuousDeployment - tag: dev"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["develop"].SourceBranches.ShouldBe(new List()); - } - - [Test] - public void ShouldUseSpecifiedSourceBranchesForFeature() - { - const string text = @" -next-version: 2.0.0 -branches: - feature: - mode: ContinuousDeployment - source-branches: ['develop', 'release'] - tag: dev"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["feature"].SourceBranches.ShouldBe(new List { "develop", "release" }); - } - - [Test] - public void ShouldUseDefaultSourceBranchesWhenNotSpecifiedForFeature() - { - const string text = @" -next-version: 2.0.0 -branches: - feature: - mode: ContinuousDeployment - tag: dev"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.Branches["feature"].SourceBranches.ShouldBe( - new List { "develop", MainBranch, "release", "feature", "support", "hotfix" }); - } - - [Test] - public void ShouldNotOverrideAnythingWhenOverrideConfigIsEmpty() - { - const string text = @" -next-version: 1.2.3 -tag-prefix: custom-tag-prefix-from-yml"; - SetupConfigFileContent(text); - - var expectedConfig = this.configProvider.Provide(this.repoPath); - var overridenConfig = this.configProvider.Provide(this.repoPath, new Config()); - - overridenConfig.AssemblyVersioningScheme.ShouldBe(expectedConfig.AssemblyVersioningScheme); - overridenConfig.AssemblyFileVersioningScheme.ShouldBe(expectedConfig.AssemblyFileVersioningScheme); - overridenConfig.AssemblyInformationalFormat.ShouldBe(expectedConfig.AssemblyInformationalFormat); - overridenConfig.AssemblyVersioningFormat.ShouldBe(expectedConfig.AssemblyVersioningFormat); - overridenConfig.AssemblyFileVersioningFormat.ShouldBe(expectedConfig.AssemblyFileVersioningFormat); - overridenConfig.VersioningMode.ShouldBe(expectedConfig.VersioningMode); - overridenConfig.TagPrefix.ShouldBe(expectedConfig.TagPrefix); - overridenConfig.ContinuousDeploymentFallbackTag.ShouldBe(expectedConfig.ContinuousDeploymentFallbackTag); - overridenConfig.NextVersion.ShouldBe(expectedConfig.NextVersion); - overridenConfig.MajorVersionBumpMessage.ShouldBe(expectedConfig.MajorVersionBumpMessage); - overridenConfig.MinorVersionBumpMessage.ShouldBe(expectedConfig.MinorVersionBumpMessage); - overridenConfig.PatchVersionBumpMessage.ShouldBe(expectedConfig.PatchVersionBumpMessage); - overridenConfig.NoBumpMessage.ShouldBe(expectedConfig.NoBumpMessage); - overridenConfig.LegacySemVerPadding.ShouldBe(expectedConfig.LegacySemVerPadding); - overridenConfig.BuildMetaDataPadding.ShouldBe(expectedConfig.BuildMetaDataPadding); - overridenConfig.CommitsSinceVersionSourcePadding.ShouldBe(expectedConfig.CommitsSinceVersionSourcePadding); - overridenConfig.TagPreReleaseWeight.ShouldBe(expectedConfig.TagPreReleaseWeight); - overridenConfig.CommitMessageIncrementing.ShouldBe(expectedConfig.CommitMessageIncrementing); - overridenConfig.Increment.ShouldBe(expectedConfig.Increment); - overridenConfig.CommitDateFormat.ShouldBe(expectedConfig.CommitDateFormat); - overridenConfig.MergeMessageFormats.ShouldBe(expectedConfig.MergeMessageFormats); - overridenConfig.UpdateBuildNumber.ShouldBe(expectedConfig.UpdateBuildNumber); - - overridenConfig.Ignore.ShouldBeEquivalentTo(expectedConfig.Ignore); - - overridenConfig.Branches.Keys.ShouldBe(expectedConfig.Branches.Keys); - - foreach (var branch in overridenConfig.Branches.Keys) - { - overridenConfig.Branches[branch].ShouldBeEquivalentTo(expectedConfig.Branches[branch]); - } - } - - [Test] - public void ShouldUseDefaultTagPrefixWhenNotSetInConfigFile() - { - const string text = ""; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.TagPrefix.ShouldBe(Config.DefaultTagPrefix); - } - - [Test] - public void ShouldUseTagPrefixFromConfigFileWhenProvided() - { - const string text = "tag-prefix: custom-tag-prefix-from-yml"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath); - - config.TagPrefix.ShouldBe("custom-tag-prefix-from-yml"); - } - - [Test] - public void ShouldOverrideTagPrefixWithOverrideConfigValue([Values] bool tagPrefixSetAtYmlFile) - { - var text = tagPrefixSetAtYmlFile ? "tag-prefix: custom-tag-prefix-from-yml" : ""; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath, new Config { TagPrefix = "tag-prefix-from-override-config" }); - - config.TagPrefix.ShouldBe("tag-prefix-from-override-config"); - } - - [Test] - public void ShouldNotOverrideDefaultTagPrefixWhenNotSetInOverrideConfig() - { - const string text = ""; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath, new Config { TagPrefix = null }); - - config.TagPrefix.ShouldBe(Config.DefaultTagPrefix); - } - - [Test] - public void ShouldNotOverrideTagPrefixFromConfigFileWhenNotSetInOverrideConfig() - { - const string text = "tag-prefix: custom-tag-prefix-from-yml"; - SetupConfigFileContent(text); - var config = this.configProvider.Provide(this.repoPath, new Config { TagPrefix = null }); - - config.TagPrefix.ShouldBe("custom-tag-prefix-from-yml"); - } -} diff --git a/src/GitVersion.Core.Tests/Configuration/IgnoreConfigTests.cs b/src/GitVersion.Core.Tests/Configuration/IgnoreConfigTests.cs deleted file mode 100644 index 4cc79f76f8..0000000000 --- a/src/GitVersion.Core.Tests/Configuration/IgnoreConfigTests.cs +++ /dev/null @@ -1,83 +0,0 @@ -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using NUnit.Framework; -using Shouldly; -using YamlDotNet.Core; - -namespace GitVersion.Core.Tests.Configuration; - -[TestFixture] -public class IgnoreConfigTests : TestBase -{ - [Test] - public void CanDeserialize() - { - const string yaml = @" -ignore: - sha: [b6c0c9fda88830ebcd563e500a5a7da5a1658e98] - commits-before: 2015-10-23T12:23:15 -"; - - using var reader = new StringReader(yaml); - var config = ConfigSerializer.Read(reader); - - config.Ignore.ShouldNotBeNull(); - config.Ignore.ShAs.ShouldNotBeEmpty(); - config.Ignore.ShAs.ShouldBe(new[] { "b6c0c9fda88830ebcd563e500a5a7da5a1658e98" }); - config.Ignore.Before.ShouldBe(DateTimeOffset.Parse("2015-10-23T12:23:15")); - } - - [Test] - public void ShouldSupportsOtherSequenceFormat() - { - const string yaml = @" -ignore: - sha: - - b6c0c9fda88830ebcd563e500a5a7da5a1658e98 - - 6c19c7c219ecf8dbc468042baefa73a1b213e8b1 -"; - - using var reader = new StringReader(yaml); - var config = ConfigSerializer.Read(reader); - - config.Ignore.ShouldNotBeNull(); - config.Ignore.ShAs.ShouldNotBeEmpty(); - config.Ignore.ShAs.ShouldBe(new[] { "b6c0c9fda88830ebcd563e500a5a7da5a1658e98", "6c19c7c219ecf8dbc468042baefa73a1b213e8b1" }); - } - - [Test] - public void WhenNotInConfigShouldHaveDefaults() - { - const string yaml = @" -next-version: 1.0 -"; - - using var reader = new StringReader(yaml); - var config = ConfigSerializer.Read(reader); - - config.Ignore.ShouldNotBeNull(); - config.Ignore.ShAs.ShouldBeEmpty(); - config.Ignore.Before.ShouldBe(null); - } - - [Test] - public void WhenBadDateFormatShouldFail() - { - const string yaml = @" -ignore: - commits-before: bad format date -"; - - using var reader = new StringReader(yaml); - Should.Throw(() => ConfigSerializer.Read(reader)); - } - - [Test] - public void NewInstanceShouldBeEmpty() - { - var ignoreConfig = new IgnoreConfig(); - - ignoreConfig.IsEmpty.ShouldBeTrue(); - } -} diff --git a/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt b/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt deleted file mode 100644 index 0368e755e7..0000000000 --- a/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.CanSetNextVersion.approved.txt +++ /dev/null @@ -1,5 +0,0 @@ -next-version: 2.0.0 -branches: {} -ignore: - sha: [] -merge-message-formats: {} diff --git a/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.cs b/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.cs deleted file mode 100644 index cdef91bd81..0000000000 --- a/src/GitVersion.Core.Tests/Configuration/Init/InitScenarios.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Runtime.InteropServices; -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Helpers; -using GitVersion.Logging; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using NUnit.Framework; -using Shouldly; - -namespace GitVersion.Core.Tests.Init; - -[TestFixture] -public class InitScenarios : TestBase -{ - [SetUp] - public void Setup() => ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); - - [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void CanSetNextVersion() - { - var workingDirectory = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? "c:\\proj" : "/proj"; - var options = Options.Create(new GitVersionOptions { WorkingDirectory = workingDirectory }); - - var sp = ConfigureServices(services => - { - services.AddSingleton(new TestConsole("3", "2.0.0", "0")); - services.AddSingleton(options); - }); - - var configurationProvider = sp.GetRequiredService(); - var fileSystem = sp.GetRequiredService(); - configurationProvider.Init(workingDirectory); - - fileSystem.ReadAllText(PathHelper.Combine(workingDirectory, "GitVersion.yml")).ShouldMatchApproved(); - } -} diff --git a/src/GitVersion.Core.Tests/Core/DynamicRepositoryTests.cs b/src/GitVersion.Core.Tests/Core/DynamicRepositoryTests.cs index 1fc72dac93..1b33127e2d 100644 --- a/src/GitVersion.Core.Tests/Core/DynamicRepositoryTests.cs +++ b/src/GitVersion.Core.Tests/Core/DynamicRepositoryTests.cs @@ -2,7 +2,6 @@ using GitVersion.Helpers; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NUnit.Framework; namespace GitVersion.Core.Tests; @@ -49,8 +48,8 @@ public void Cleanup() // Note: use same name twice to see if changing commits works on same (cached) repository [NonParallelizable] - [TestCase("GV_main", "https://github.com/GitTools/GitVersion", MainBranch, "efddf2f92c539a9c27f1904d952dcab8fb955f0e", "5.8.2+56")] - [TestCase("GV_main", "https://github.com/GitTools/GitVersion", MainBranch, "2dc142a4a4df77db61a00d9fb7510b18b3c2c85a", "5.8.2+47")] + [TestCase("GV_main", "https://github.com/GitTools/GitVersion", MainBranch, "efddf2f92c539a9c27f1904d952dcab8fb955f0e", "5.8.2-56")] + [TestCase("GV_main", "https://github.com/GitTools/GitVersion", MainBranch, "2dc142a4a4df77db61a00d9fb7510b18b3c2c85a", "5.8.2-47")] public void FindsVersionInDynamicRepo(string name, string url, string targetBranch, string commitId, string expectedFullSemVer) { var root = PathHelper.Combine(this.workDirectory, name); @@ -82,6 +81,6 @@ public void FindsVersionInDynamicRepo(string name, string url, string targetBran var versionVariables = gitVersionCalculator.CalculateVersionVariables(); - Assert.AreEqual(expectedFullSemVer, versionVariables.FullSemVer); + Assert.That(versionVariables.FullSemVer, Is.EqualTo(expectedFullSemVer)); } } diff --git a/src/GitVersion.Core.Tests/Core/GitVersionExecutorTests.cs b/src/GitVersion.Core.Tests/Core/GitVersionExecutorTests.cs index 8655937572..e1e52ae9e6 100644 --- a/src/GitVersion.Core.Tests/Core/GitVersionExecutorTests.cs +++ b/src/GitVersion.Core.Tests/Core/GitVersionExecutorTests.cs @@ -1,16 +1,13 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; +using GitVersion.Git; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation.Cache; +using GitVersion.VersionCalculation.Caching; using LibGit2Sharp; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -20,7 +17,7 @@ public class GitVersionExecutorTests : TestBase { private IFileSystem fileSystem; private ILog log; - private IGitVersionCache gitVersionCache; + private GitVersionCacheProvider gitVersionCacheProvider; private IServiceProvider sp; [Test] @@ -30,12 +27,7 @@ public void CacheKeySameAfterReNormalizing() const string targetUrl = "https://github.com/GitTools/GitVersion.git"; const string targetBranch = $"refs/head/{MainBranch}"; - var gitVersionOptions = new GitVersionOptions - { - RepositoryInfo = { TargetUrl = targetUrl, TargetBranch = targetBranch }, - WorkingDirectory = fixture.RepositoryPath, - Settings = { NoNormalize = false } - }; + var gitVersionOptions = new GitVersionOptions { RepositoryInfo = { TargetUrl = targetUrl, TargetBranch = targetBranch }, WorkingDirectory = fixture.RepositoryPath, Settings = { NoNormalize = false } }; var environment = new TestEnvironment(); environment.SetEnvironmentVariable(AzurePipelines.EnvironmentVariableName, "true"); @@ -59,11 +51,7 @@ public void GitPreparerShouldNotFailWhenTargetPathNotInitialized() { const string targetUrl = "https://github.com/GitTools/GitVersion.git"; - var gitVersionOptions = new GitVersionOptions - { - RepositoryInfo = { TargetUrl = targetUrl }, - WorkingDirectory = string.Empty - }; + var gitVersionOptions = new GitVersionOptions { RepositoryInfo = { TargetUrl = targetUrl }, WorkingDirectory = string.Empty }; Should.NotThrow(() => { this.sp = GetServiceProvider(gitVersionOptions); @@ -73,8 +61,6 @@ public void GitPreparerShouldNotFailWhenTargetPathNotInitialized() } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CacheKeyForWorktree() { using var fixture = new EmptyRepositoryFixture(); @@ -88,17 +74,14 @@ public void CacheKeyForWorktree() const string targetUrl = "https://github.com/GitTools/GitVersion.git"; - var gitVersionOptions = new GitVersionOptions - { - RepositoryInfo = { TargetUrl = targetUrl, TargetBranch = MainBranch }, - WorkingDirectory = worktreePath - }; + var gitVersionOptions = new GitVersionOptions { RepositoryInfo = { TargetUrl = targetUrl, TargetBranch = MainBranch }, WorkingDirectory = worktreePath }; this.sp = GetServiceProvider(gitVersionOptions); var preparer = this.sp.GetRequiredService(); preparer.Prepare(); - var cacheKey = this.sp.GetRequiredService().Create(null); + var cacheKeyFactory = this.sp.GetRequiredService(); + var cacheKey = cacheKeyFactory.Create(null); cacheKey.Value.ShouldNotBeEmpty(); } finally @@ -110,41 +93,35 @@ public void CacheKeyForWorktree() [Test] public void CacheFileExistsOnDisk() { - const string versionCacheFileContent = @" - Major: 4 - Minor: 10 - Patch: 3 - PreReleaseTag: test.19 - PreReleaseTagWithDash: -test.19 - PreReleaseLabel: test - PreReleaseLabelWithDash: -test - PreReleaseNumber: 19 - WeightedPreReleaseNumber: 19 - BuildMetaData: - BuildMetaDataPadded: - FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - MajorMinorPatch: 4.10.3 - SemVer: 4.10.3-test.19 - LegacySemVer: 4.10.3-test19 - LegacySemVerPadded: 4.10.3-test0019 - AssemblySemVer: 4.10.3.0 - AssemblySemFileVer: 4.10.3.0 - FullSemVer: 4.10.3-test.19 - InformationalVersion: 4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - BranchName: feature/test - EscapedBranchName: feature-test - Sha: dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - ShortSha: dd2a29af - NuGetVersionV2: 4.10.3-test0019 - NuGetVersion: 4.10.3-test0019 - NuGetPreReleaseTagV2: test0019 - NuGetPreReleaseTag: test0019 - VersionSourceSha: 4.10.2 - CommitsSinceVersionSource: 19 - CommitsSinceVersionSourcePadded: 0019 - CommitDate: 2015-11-10 - UncommittedChanges: 0 - "; + const string versionCacheFileContent = """ + { + "Major": 4, + "Minor": 10, + "Patch": 3, + "PreReleaseTag": "test.19", + "PreReleaseTagWithDash": "-test.19", + "PreReleaseLabel": "test", + "PreReleaseLabelWithDash": "-test", + "PreReleaseNumber": 19, + "WeightedPreReleaseNumber": 19, + "BuildMetaData": null, + "FullBuildMetaData": "Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "MajorMinorPatch": "4.10.3", + "SemVer": "4.10.3-test.19", + "AssemblySemVer": "4.10.3.0", + "AssemblySemFileVer": "4.10.3.0", + "FullSemVer": "4.10.3-test.19", + "InformationalVersion": "4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "BranchName": "feature/test", + "EscapedBranchName": "feature-test", + "Sha": "dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "ShortSha": "dd2a29af", + "VersionSourceSha": "4.10.2", + "CommitsSinceVersionSource": 19, + "CommitDate": "2015-11-10T00:00:00.000Z", + "UncommittedChanges": 0 + } + """; var stringBuilder = new StringBuilder(); void Action(string s) => stringBuilder.AppendLine(s); @@ -160,53 +137,51 @@ public void CacheFileExistsOnDisk() var gitVersionCalculator = GetGitVersionCalculator(gitVersionOptions, this.log); var versionVariables = gitVersionCalculator.CalculateVersionVariables(); - versionVariables.AssemblySemVer.ShouldBe("0.1.0.0"); + versionVariables.AssemblySemVer.ShouldBe("0.0.1.0"); - this.fileSystem.WriteAllText(versionVariables.FileName, versionCacheFileContent); + var cacheKeyFactory = this.sp.GetRequiredService(); + var cacheKey = cacheKeyFactory.Create(null); + var cacheFileName = this.gitVersionCacheProvider.GetCacheFileName(cacheKey); + + this.fileSystem.WriteAllText(cacheFileName, versionCacheFileContent); versionVariables = gitVersionCalculator.CalculateVersionVariables(); versionVariables.AssemblySemVer.ShouldBe("4.10.3.0"); var logsMessages = stringBuilder.ToString(); - logsMessages.ShouldContain("Deserializing version variables from cache file", Case.Insensitive, logsMessages); + logsMessages.ShouldContain("Loading version variables from disk cache file", Case.Insensitive, logsMessages); } [Test] public void CacheFileExistsOnDiskWhenOverrideConfigIsSpecifiedVersionShouldBeDynamicallyCalculatedWithoutSavingInCache() { - const string versionCacheFileContent = @" - Major: 4 - Minor: 10 - Patch: 3 - PreReleaseTag: test.19 - PreReleaseTagWithDash: -test.19 - PreReleaseLabel: test - PreReleaseLabelWithDash: -test - PreReleaseNumber: 19 - BuildMetaData: - BuildMetaDataPadded: - FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - MajorMinorPatch: 4.10.3 - SemVer: 4.10.3-test.19 - LegacySemVer: 4.10.3-test19 - LegacySemVerPadded: 4.10.3-test0019 - AssemblySemVer: 4.10.3.0 - AssemblySemFileVer: 4.10.3.0 - FullSemVer: 4.10.3-test.19 - InformationalVersion: 4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - BranchName: feature/test - EscapedBranchName: feature-test - Sha: dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - ShortSha: dd2a29af - NuGetVersionV2: 4.10.3-test0019 - NuGetVersion: 4.10.3-test0019 - NuGetPreReleaseTagV2: test0019 - NuGetPreReleaseTag: test0019 - CommitsSinceVersionSource: 19 - CommitsSinceVersionSourcePadded: 0019 - CommitDate: 2015-11-10 - UncommittedChanges: 0 - "; + const string versionCacheFileContent = """ + { + "Major": 4, + "Minor": 10, + "Patch": 3, + "PreReleaseTag": "test.19", + "PreReleaseTagWithDash": "-test.19", + "PreReleaseLabel": "test", + "PreReleaseLabelWithDash": "-test", + "PreReleaseNumber": 19, + "BuildMetaData": null, + "FullBuildMetaData": "Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "MajorMinorPatch": "4.10.3", + "SemVer": "4.10.3-test.19", + "AssemblySemVer": "4.10.3.0", + "AssemblySemFileVer": "4.10.3.0", + "FullSemVer": "4.10.3-test.19", + "InformationalVersion": "4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "BranchName": "feature/test", + "EscapedBranchName": "feature-test", + "Sha": "dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "ShortSha": "dd2a29af", + "CommitsSinceVersionSource": 19, + "CommitDate": "2015-11-10T00:00:00.000Z", + "UncommittedChanges": 0 + } + """; using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit(); @@ -215,24 +190,29 @@ public void CacheFileExistsOnDiskWhenOverrideConfigIsSpecifiedVersionShouldBeDyn var gitVersionCalculator = GetGitVersionCalculator(gitVersionOptions, this.log); var versionVariables = gitVersionCalculator.CalculateVersionVariables(); - versionVariables.AssemblySemVer.ShouldBe("0.1.0.0"); + versionVariables.AssemblySemVer.ShouldBe("0.0.1.0"); - this.fileSystem.WriteAllText(versionVariables.FileName, versionCacheFileContent); + var cacheKeyFactory = this.sp.GetRequiredService(); + var cacheKey = cacheKeyFactory.Create(null); + var cacheFileName = this.gitVersionCacheProvider.GetCacheFileName(cacheKey); + this.fileSystem.WriteAllText(cacheFileName, versionCacheFileContent); - var cacheDirectory = this.gitVersionCache.GetCacheDirectory(); + var cacheDirectory = this.gitVersionCacheProvider.GetCacheDirectory(); var cacheDirectoryTimestamp = this.fileSystem.GetLastDirectoryWrite(cacheDirectory); - var config = new ConfigurationBuilder().Add(new Config { TagPrefix = "prefix" }).Build(); - gitVersionOptions = new GitVersionOptions { WorkingDirectory = fixture.RepositoryPath, ConfigInfo = { OverrideConfig = config } }; + var configuration = GitFlowConfigurationBuilder.New.WithTagPrefix("prefix").Build(); + var overrideConfiguration = new ConfigurationHelper(configuration).Dictionary; + + gitVersionOptions = new() { WorkingDirectory = fixture.RepositoryPath, ConfigurationInfo = { OverrideConfiguration = overrideConfiguration } }; gitVersionCalculator = GetGitVersionCalculator(gitVersionOptions); versionVariables = gitVersionCalculator.CalculateVersionVariables(); - versionVariables.AssemblySemVer.ShouldBe("0.1.0.0"); + versionVariables.AssemblySemVer.ShouldBe("0.0.1.0"); var cachedDirectoryTimestampAfter = this.fileSystem.GetLastDirectoryWrite(cacheDirectory); - cachedDirectoryTimestampAfter.ShouldBe(cacheDirectoryTimestamp, "Cache was updated when override config was set"); + cachedDirectoryTimestampAfter.ShouldBe(cacheDirectoryTimestamp, "Cache was updated when override configuration was set"); } [Test] @@ -254,47 +234,42 @@ public void CacheFileIsMissing() gitVersionCalculator.CalculateVersionVariables(); var logsMessages = stringBuilder.ToString(); - logsMessages.ShouldContain("yml not found", Case.Insensitive, logsMessages); + logsMessages.ShouldMatch("(?s).*Cache file.*(?-s) not found.*"); } - [Test] - public void ConfigChangeInvalidatesCache() + [TestCase(ConfigurationFileLocator.DefaultFileName)] + [TestCase(ConfigurationFileLocator.DefaultAlternativeFileName)] + public void ConfigChangeInvalidatesCache(string configFileName) { - const string versionCacheFileContent = @" - Major: 4 - Minor: 10 - Patch: 3 - PreReleaseTag: test.19 - PreReleaseTagWithDash: -test.19 - PreReleaseLabel: test - PreReleaseLabelWithDash: -test - PreReleaseNumber: 19 - WeightedPreReleaseNumber: 19 - BuildMetaData: - BuildMetaDataPadded: - FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - MajorMinorPatch: 4.10.3 - SemVer: 4.10.3-test.19 - LegacySemVer: 4.10.3-test19 - LegacySemVerPadded: 4.10.3-test0019 - AssemblySemVer: 4.10.3.0 - AssemblySemFileVer: 4.10.3.0 - FullSemVer: 4.10.3-test.19 - InformationalVersion: 4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - BranchName: feature/test - EscapedBranchName: feature-test - Sha: dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - ShortSha: dd2a29af - NuGetVersionV2: 4.10.3-test0019 - NuGetVersion: 4.10.3-test0019 - NuGetPreReleaseTagV2: test0019 - NuGetPreReleaseTag: test0019 - VersionSourceSha: 4.10.2 - CommitsSinceVersionSource: 19 - CommitsSinceVersionSourcePadded: 0019 - CommitDate: 2015-11-10 - UncommittedChanges: 0 - "; + const string versionCacheFileContent = """ + { + "Major": 4, + "Minor": 10, + "Patch": 3, + "PreReleaseTag": "test.19", + "PreReleaseTagWithDash": "-test.19", + "PreReleaseLabel": "test", + "PreReleaseLabelWithDash": "-test", + "PreReleaseNumber": 19, + "WeightedPreReleaseNumber": 19, + "BuildMetaData": null, + "FullBuildMetaData": "Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "MajorMinorPatch": "4.10.3", + "SemVer": "4.10.3-test.19", + "AssemblySemVer": "4.10.3.0", + "AssemblySemFileVer": "4.10.3.0", + "FullSemVer": "4.10.3-test.19", + "InformationalVersion": "4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "BranchName": "feature/test", + "EscapedBranchName": "feature-test", + "Sha": "dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "ShortSha": "dd2a29af", + "VersionSourceSha": "4.10.2", + "CommitsSinceVersionSource": 19, + "CommitDate": "2015-11-10T00:00:00.000Z", + "UncommittedChanges": 0 + } + """; using var fixture = new EmptyRepositoryFixture(); @@ -305,16 +280,19 @@ public void ConfigChangeInvalidatesCache() var gitVersionCalculator = GetGitVersionCalculator(gitVersionOptions); var versionVariables = gitVersionCalculator.CalculateVersionVariables(); - versionVariables.AssemblySemVer.ShouldBe("0.1.0.0"); - versionVariables.FileName.ShouldNotBeNullOrEmpty(); + versionVariables.AssemblySemVer.ShouldBe("0.0.1.0"); + + var cacheKeyFactory = this.sp.GetRequiredService(); + var cacheKey = cacheKeyFactory.Create(null); + var cacheFileName = this.gitVersionCacheProvider.GetCacheFileName(cacheKey); - this.fileSystem.WriteAllText(versionVariables.FileName, versionCacheFileContent); + this.fileSystem.WriteAllText(cacheFileName, versionCacheFileContent); versionVariables = gitVersionCalculator.CalculateVersionVariables(); versionVariables.AssemblySemVer.ShouldBe("4.10.3.0"); - var configPath = PathHelper.Combine(fixture.RepositoryPath, ConfigFileLocator.DefaultFileName); - this.fileSystem.WriteAllText(configPath, "next-version: 5.0"); + var configPath = PathHelper.Combine(fixture.RepositoryPath, configFileName); + this.fileSystem.WriteAllText(configPath, "next-version: 5.0.0"); gitVersionCalculator = GetGitVersionCalculator(gitVersionOptions, fs: this.fileSystem); @@ -325,41 +303,35 @@ public void ConfigChangeInvalidatesCache() [Test] public void NoCacheBypassesCache() { - const string versionCacheFileContent = @" - Major: 4 - Minor: 10 - Patch: 3 - PreReleaseTag: test.19 - PreReleaseTagWithDash: -test.19 - PreReleaseLabel: test - PreReleaseLabelWithDash: -test - PreReleaseNumber: 19 - WeightedPreReleaseNumber: 19 - BuildMetaData: - BuildMetaDataPadded: - FullBuildMetaData: Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - MajorMinorPatch: 4.10.3 - SemVer: 4.10.3-test.19 - LegacySemVer: 4.10.3-test19 - LegacySemVerPadded: 4.10.3-test0019 - AssemblySemVer: 4.10.3.0 - AssemblySemFileVer: 4.10.3.0 - FullSemVer: 4.10.3-test.19 - InformationalVersion: 4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - BranchName: feature/test - EscapedBranchName: feature-test - Sha: dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f - ShortSha: dd2a29af - NuGetVersionV2: 4.10.3-test0019 - NuGetVersion: 4.10.3-test0019 - NuGetPreReleaseTagV2: test0019 - NuGetPreReleaseTag: test0019 - VersionSourceSha: 4.10.2 - CommitsSinceVersionSource: 19 - CommitsSinceVersionSourcePadded: 0019 - CommitDate: 2015-11-10 - UncommittedChanges: 0 - "; + const string versionCacheFileContent = """ + { + "Major": 4, + "Minor": 10, + "Patch": 3, + "PreReleaseTag": "test.19", + "PreReleaseTagWithDash": "-test.19", + "PreReleaseLabel": "test", + "PreReleaseLabelWithDash": "-test", + "PreReleaseNumber": 19, + "WeightedPreReleaseNumber": 19, + "BuildMetaData": null, + "FullBuildMetaData": "Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "MajorMinorPatch": "4.10.3", + "SemVer": "4.10.3-test.19", + "AssemblySemVer": "4.10.3.0", + "AssemblySemFileVer": "4.10.3.0", + "FullSemVer": "4.10.3-test.19", + "InformationalVersion": "4.10.3-test.19+Branch.feature/test.Sha.dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "BranchName": "feature/test", + "EscapedBranchName": "feature-test", + "Sha": "dd2a29aff0c948e1bdf3dabbe13e1576e70d5f9f", + "ShortSha": "dd2a29af", + "VersionSourceSha": "4.10.2", + "CommitsSinceVersionSource": 19, + "CommitDate": "2015-11-10T00:00:00.000Z", + "UncommittedChanges": 0 + } + """; using var fixture = new EmptyRepositoryFixture(); @@ -370,22 +342,25 @@ public void NoCacheBypassesCache() var versionVariables = gitVersionCalculator.CalculateVersionVariables(); - versionVariables.AssemblySemVer.ShouldBe("0.1.0.0"); - versionVariables.FileName.ShouldNotBeNullOrEmpty(); + versionVariables.AssemblySemVer.ShouldBe("0.0.1.0"); - this.fileSystem.WriteAllText(versionVariables.FileName, versionCacheFileContent); + var cacheKeyFactory = this.sp.GetRequiredService(); + var cacheKey = cacheKeyFactory.Create(null); + var cacheFileName = this.gitVersionCacheProvider.GetCacheFileName(cacheKey); + + this.fileSystem.WriteAllText(cacheFileName, versionCacheFileContent); versionVariables = gitVersionCalculator.CalculateVersionVariables(); versionVariables.AssemblySemVer.ShouldBe("4.10.3.0"); gitVersionOptions.Settings.NoCache = true; versionVariables = gitVersionCalculator.CalculateVersionVariables(); - versionVariables.AssemblySemVer.ShouldBe("0.1.0.0"); + versionVariables.AssemblySemVer.ShouldBe("0.0.1.0"); } [Test] public void WorkingDirectoryWithoutGit() { - var gitVersionOptions = new GitVersionOptions { WorkingDirectory = System.Environment.SystemDirectory }; + var gitVersionOptions = new GitVersionOptions { WorkingDirectory = SysEnv.SystemDirectory }; var exception = Assert.Throws(() => { @@ -411,8 +386,6 @@ public void WorkingDirectoryWithoutCommits() } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void GetProjectRootDirectoryWorkingDirectoryWithWorktree() { using var fixture = new EmptyRepositoryFixture(); @@ -427,11 +400,7 @@ public void GetProjectRootDirectoryWorkingDirectoryWithWorktree() const string targetUrl = "https://github.com/GitTools/GitVersion.git"; - var gitVersionOptions = new GitVersionOptions - { - RepositoryInfo = { TargetUrl = targetUrl }, - WorkingDirectory = worktreePath - }; + var gitVersionOptions = new GitVersionOptions { RepositoryInfo = { TargetUrl = targetUrl }, WorkingDirectory = worktreePath }; this.sp = GetServiceProvider(gitVersionOptions); var repositoryInfo = this.sp.GetRequiredService(); @@ -449,11 +418,7 @@ public void GetProjectRootDirectoryNoWorktree() using var fixture = new EmptyRepositoryFixture(); const string targetUrl = "https://github.com/GitTools/GitVersion.git"; - var gitVersionOptions = new GitVersionOptions - { - RepositoryInfo = { TargetUrl = targetUrl }, - WorkingDirectory = fixture.RepositoryPath - }; + var gitVersionOptions = new GitVersionOptions { RepositoryInfo = { TargetUrl = targetUrl }, WorkingDirectory = fixture.RepositoryPath }; this.sp = GetServiceProvider(gitVersionOptions); var repositoryInfo = this.sp.GetRequiredService(); @@ -467,10 +432,7 @@ public void GetDotGitDirectoryNoWorktree() { using var fixture = new EmptyRepositoryFixture(); - var gitVersionOptions = new GitVersionOptions - { - WorkingDirectory = fixture.RepositoryPath - }; + var gitVersionOptions = new GitVersionOptions { WorkingDirectory = fixture.RepositoryPath }; this.sp = GetServiceProvider(gitVersionOptions); var repositoryInfo = this.sp.GetRequiredService(); @@ -480,8 +442,6 @@ public void GetDotGitDirectoryNoWorktree() } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void GetDotGitDirectoryWorktree() { using var fixture = new EmptyRepositoryFixture(); @@ -494,10 +454,7 @@ public void GetDotGitDirectoryWorktree() var repo = new Repository(fixture.RepositoryPath); repo.Worktrees.Add("worktree", worktreePath, false); - var gitVersionOptions = new GitVersionOptions - { - WorkingDirectory = worktreePath - }; + var gitVersionOptions = new GitVersionOptions { WorkingDirectory = worktreePath }; this.sp = GetServiceProvider(gitVersionOptions); var repositoryInfo = this.sp.GetRequiredService(); @@ -512,8 +469,6 @@ public void GetDotGitDirectoryWorktree() } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CalculateVersionFromWorktreeHead() { // Setup @@ -527,7 +482,7 @@ public void CalculateVersionFromWorktreeHead() fixture.Repository.MakeATaggedCommit("v2.0.0"); fixture.Repository.Worktrees.Add(branchV1.CanonicalName, "1.0", worktreePath, false); - using var worktreeFixture = new LocalRepositoryFixture(new Repository(worktreePath)); + using var worktreeFixture = new LocalRepositoryFixture(new(worktreePath)); var gitVersionOptions = new GitVersionOptions { WorkingDirectory = worktreeFixture.RepositoryPath }; @@ -543,8 +498,6 @@ public void CalculateVersionFromWorktreeHead() } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndNotTagged_ThrowException() { // Setup @@ -556,7 +509,7 @@ public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndNotTa fixture.LocalRepositoryFixture.Repository.CreateBranch("support/1.0"); fixture.LocalRepositoryFixture.Checkout(commit.Sha); - using var worktreeFixture = new LocalRepositoryFixture(new Repository(fixture.LocalRepositoryFixture.RepositoryPath)); + using var worktreeFixture = new LocalRepositoryFixture(new(fixture.LocalRepositoryFixture.RepositoryPath)); var gitVersionOptions = new GitVersionOptions { WorkingDirectory = worktreeFixture.RepositoryPath }; var environment = new TestEnvironment(); @@ -571,8 +524,6 @@ public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndNotTa } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndTagged_ReturnSemver() { // Setup @@ -585,7 +536,7 @@ public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndTagge fixture.LocalRepositoryFixture.ApplyTag("1.0.1"); fixture.LocalRepositoryFixture.Checkout(commit.Sha); - using var worktreeFixture = new LocalRepositoryFixture(new Repository(fixture.LocalRepositoryFixture.RepositoryPath)); + using var worktreeFixture = new LocalRepositoryFixture(new(fixture.LocalRepositoryFixture.RepositoryPath)); var gitVersionOptions = new GitVersionOptions { WorkingDirectory = worktreeFixture.RepositoryPath }; var environment = new TestEnvironment(); @@ -603,13 +554,34 @@ public void CalculateVersionVariables_TwoBranchHasSameCommitHeadDetachedAndTagge version.Sha.ShouldBe(commits.First().Sha); } + [Test] + public void CalculateVersionVariables_ShallowFetch_ThrowException() + { + // Setup + using var fixture = new RemoteRepositoryFixture(); + fixture.LocalRepositoryFixture.MakeShallow(); + + using var worktreeFixture = new LocalRepositoryFixture(new(fixture.LocalRepositoryFixture.RepositoryPath)); + var gitVersionOptions = new GitVersionOptions { WorkingDirectory = worktreeFixture.RepositoryPath }; + + var environment = new TestEnvironment(); + environment.SetEnvironmentVariable(AzurePipelines.EnvironmentVariableName, "true"); + + this.sp = GetServiceProvider(gitVersionOptions, environment: environment); + var sut = sp.GetRequiredService(); + + // Execute & Verify + var exception = Assert.Throws(() => sut.CalculateVersionVariables()); + exception?.Message.ShouldBe("Repository is a shallow clone. Git repositories must contain the full history. See https://gitversion.net/docs/reference/requirements#unshallow for more info."); + } + private IGitVersionCalculateTool GetGitVersionCalculator(GitVersionOptions gitVersionOptions, ILog? logger = null, IGitRepository? repository = null, IFileSystem? fs = null) { this.sp = GetServiceProvider(gitVersionOptions, logger, repository, fs); this.fileSystem = this.sp.GetRequiredService(); this.log = this.sp.GetRequiredService(); - this.gitVersionCache = this.sp.GetRequiredService(); + this.gitVersionCacheProvider = (GitVersionCacheProvider)this.sp.GetRequiredService(); return this.sp.GetRequiredService(); } @@ -630,6 +602,6 @@ private static IServiceProvider GetServiceProvider(GitVersionOptions gitVersionO if (environment != null) services.AddSingleton(environment); var options = Options.Create(gitVersionOptions); services.AddSingleton(options); - services.AddSingleton(RepositoryExtensions.ToGitRepositoryInfo(options)); + services.AddSingleton(new GitRepositoryInfo(options)); }); } diff --git a/src/GitVersion.Core.Tests/Core/GitVersionToolDirectoryTests.cs b/src/GitVersion.Core.Tests/Core/GitVersionToolDirectoryTests.cs index 04e2569ed8..35e976bcb6 100644 --- a/src/GitVersion.Core.Tests/Core/GitVersionToolDirectoryTests.cs +++ b/src/GitVersion.Core.Tests/Core/GitVersionToolDirectoryTests.cs @@ -3,7 +3,6 @@ using LibGit2Sharp; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NUnit.Framework; namespace GitVersion.Core.Tests; @@ -16,9 +15,9 @@ public class GitVersionTaskDirectoryTests : TestBase [SetUp] public void SetUp() { - this.workDirectory = PathHelper.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + this.workDirectory = PathHelper.Combine(PathHelper.GetTempPath(), Guid.NewGuid().ToString()); this.gitDirectory = Repository.Init(this.workDirectory).TrimEnd(Path.DirectorySeparatorChar); - Assert.NotNull(this.gitDirectory); + Assert.That(this.gitDirectory, Is.Not.Null); } [TearDown] @@ -27,7 +26,7 @@ public void SetUp() [Test] public void FindsGitDirectory() { - try + var exception = Assert.Catch(() => { var options = Options.Create(new GitVersionOptions { WorkingDirectory = workDirectory, Settings = { NoFetch = true } }); @@ -36,23 +35,17 @@ public void FindsGitDirectory() var gitVersionCalculator = sp.GetRequiredService(); gitVersionCalculator.CalculateVersionVariables(); - } - catch (Exception ex) - { - // `RepositoryNotFoundException` means that it couldn't find the .git directory, - // any other exception means that the .git was found but there was some other issue that this test doesn't care about. - Assert.IsNotAssignableFrom(ex); - } + }); + exception.ShouldNotBeAssignableTo(); } - [Test] public void FindsGitDirectoryInParent() { var childDir = PathHelper.Combine(this.workDirectory, "child"); Directory.CreateDirectory(childDir); - try + var exception = Assert.Catch(() => { var options = Options.Create(new GitVersionOptions { WorkingDirectory = childDir, Settings = { NoFetch = true } }); @@ -61,13 +54,7 @@ public void FindsGitDirectoryInParent() var gitVersionCalculator = sp.GetRequiredService(); gitVersionCalculator.CalculateVersionVariables(); - } - catch (Exception ex) - { - // TODO I think this test is wrong.. It throws a different exception - // `RepositoryNotFoundException` means that it couldn't find the .git directory, - // any other exception means that the .git was found but there was some other issue that this test doesn't care about. - Assert.IsNotAssignableFrom(ex); - } + }); + exception.ShouldNotBeAssignableTo(); } } diff --git a/src/GitVersion.Core.Tests/Core/RepositoryExtensionsTests.cs b/src/GitVersion.Core.Tests/Core/RepositoryExtensionsTests.cs index 684d1224d1..47258223f8 100644 --- a/src/GitVersion.Core.Tests/Core/RepositoryExtensionsTests.cs +++ b/src/GitVersion.Core.Tests/Core/RepositoryExtensionsTests.cs @@ -1,6 +1,5 @@ using GitVersion.Core.Tests.Helpers; -using NSubstitute; -using NUnit.Framework; +using GitVersion.Git; namespace GitVersion.Core.Tests; @@ -35,14 +34,14 @@ private static IRemote MockRemote(IGitRepository repository) var branches = Substitute.For(); branches[branch.Name.Canonical].Returns(branch); - branches.GetEnumerator().Returns(_ => ((IEnumerable)new[] { branch }).GetEnumerator()); + branches.MockCollectionReturn(branch); var reference = Substitute.For(); reference.Name.Returns(new ReferenceName("refs/heads/develop")); var references = Substitute.For(); references["develop"].Returns(reference); - references.GetEnumerator().Returns(_ => ((IEnumerable)new[] { reference }).GetEnumerator()); + references.MockCollectionReturn(reference); repository.Refs.Returns(references); repository.Head.Returns(branch); diff --git a/src/GitVersion.Core.Tests/Core/RepositoryStoreTests.cs b/src/GitVersion.Core.Tests/Core/RepositoryStoreTests.cs index bd60860d71..67e861aad0 100644 --- a/src/GitVersion.Core.Tests/Core/RepositoryStoreTests.cs +++ b/src/GitVersion.Core.Tests/Core/RepositoryStoreTests.cs @@ -1,11 +1,9 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.Git; using GitVersion.Logging; -using GitVersion.Model.Configuration; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -68,7 +66,7 @@ public void FindsCorrectMergeBaseForForwardMerge() var developMergeBase = gitRepoMetadataProvider.FindMergeBase(develop, release); - fixtureRepository.DumpGraph(Console.WriteLine); + fixtureRepository.DumpGraph(); releaseBranchMergeBase.ShouldBe(expectedReleaseMergeBase); developMergeBase.ShouldBe(expectedDevelopMergeBase); @@ -124,7 +122,7 @@ public void FindsCorrectMergeBaseForForwardMergeMovesOn() var developMergeBase = gitRepoMetadataProvider.FindMergeBase(develop, release); - fixtureRepository.DumpGraph(Console.WriteLine); + fixtureRepository.DumpGraph(); releaseBranchMergeBase.ShouldBe(expectedReleaseMergeBase); developMergeBase.ShouldBe(expectedDevelopMergeBase); @@ -199,7 +197,7 @@ public void FindsCorrectMergeBaseForMultipleForwardMerges() var developMergeBase = gitRepoMetadataProvider.FindMergeBase(develop, release); - fixtureRepository.DumpGraph(Console.WriteLine); + fixtureRepository.DumpGraph(); releaseBranchMergeBase.ShouldBe(expectedReleaseMergeBase); developMergeBase.ShouldBe(expectedDevelopMergeBase); @@ -212,11 +210,10 @@ public void GetBranchesContainingCommitThrowsDirectlyOnNullCommit() var fixtureRepository = fixture.Repository.ToGitRepository(); var gitRepoMetadataProvider = new RepositoryStore(this.log, fixtureRepository); - Assert.Throws(() => gitRepoMetadataProvider.GetBranchesContainingCommit(null)); + Assert.Throws(() => gitRepoMetadataProvider.GetBranchesContainingCommit(null!)); } [Test] - [Ignore("Needs more investigations.")] public void FindCommitBranchWasBranchedFromShouldReturnNullIfTheRemoteIsTheOnlySource() { using var fixture = new RemoteRepositoryFixture(); @@ -228,9 +225,12 @@ public void FindCommitBranchWasBranchedFromShouldReturnNullIfTheRemoteIsTheOnlyS var branch = localRepository.FindBranch("main"); branch.ShouldNotBeNull(); - var branchedCommit = gitRepoMetadataProvider.FindCommitBranchWasBranchedFrom(branch, new Config(), Array.Empty()); - Assert.IsNull(branchedCommit.Branch); - Assert.IsNull(branchedCommit.Commit); + var configuration = GitFlowConfigurationBuilder.New.Build(); + var branchedCommit = gitRepoMetadataProvider.FindCommitBranchBranchedFrom(branch, configuration, []); + branchedCommit.ShouldBe(BranchCommit.Empty); + + var branchedCommits = gitRepoMetadataProvider.FindCommitBranchesBranchedFrom(branch, configuration).ToArray(); + branchedCommits.ShouldBeEmpty(); } } diff --git a/src/GitVersion.Core.Tests/DocumentationTests.cs b/src/GitVersion.Core.Tests/DocumentationTests.cs index 2844a20361..8ac444b4fd 100644 --- a/src/GitVersion.Core.Tests/DocumentationTests.cs +++ b/src/GitVersion.Core.Tests/DocumentationTests.cs @@ -1,10 +1,7 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; -using GitVersion.Model.Configuration; using GitVersion.OutputVariables; -using NUnit.Framework; -using Shouldly; -using YamlDotNet.Serialization; namespace GitVersion.Core.Tests; @@ -22,12 +19,12 @@ public void ConfigurationDocumentationIsUpToDate() var configurationDocumentationFile = ReadDocumentationFile("input/docs/reference/configuration.md"); const BindingFlags bindingFlags = BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance; - var configProperties = typeof(Config) + var configProperties = typeof(GitVersionConfiguration) .GetProperties(bindingFlags) - .Union(typeof(BranchConfig).GetProperties(bindingFlags)) - .Select(p => p.GetCustomAttribute()) + .Union(typeof(BranchConfiguration).GetProperties(bindingFlags)) + .Select(p => p.GetCustomAttribute()) .Where(a => a != null) - .Select(a => a?.Alias) + .Select(a => a?.Name) .ToList(); configProperties.ShouldNotBeEmpty(); @@ -36,23 +33,22 @@ public void ConfigurationDocumentationIsUpToDate() { var formattedConfigProperty = $"### {configProperty}"; configurationDocumentationFile.ShouldContain(formattedConfigProperty, Case.Insensitive, - System.Environment.NewLine + configurationDocumentationFile); + PathHelper.NewLine + configurationDocumentationFile); } } - [Test] public void VariableDocumentationIsUpToDate() { var variableDocumentationFile = ReadDocumentationFile("input/docs/reference/variables.md"); - var variables = VersionVariables.AvailableVariables.ToList(); + var variables = GitVersionVariables.AvailableVariables.ToList(); variables.ShouldNotBeEmpty(); foreach (var variable in variables) { variableDocumentationFile.ShouldContain(variable, Case.Insensitive, - System.Environment.NewLine + variableDocumentationFile); + PathHelper.NewLine + variableDocumentationFile); } } @@ -88,7 +84,7 @@ private static DirectoryInfo GetDocsDirectory() currentDirectory = currentDirectory.Parent; } - if (currentDirectory == null || !currentDirectory.Name.Equals("docs", StringComparison.Ordinal)) + if (currentDirectory?.Name.Equals("docs", StringComparison.Ordinal) != true) { throw new DirectoryNotFoundException("Couldn't find the 'docs' directory."); } diff --git a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs index cca12fe9fd..5697f70f09 100644 --- a/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs +++ b/src/GitVersion.Core.Tests/Extensions/GitToolsTestingExtensions.cs @@ -1,16 +1,14 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; +using GitVersion.Logging; using GitVersion.OutputVariables; using GitVersion.VersionCalculation; using LibGit2Sharp; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NSubstitute; -using Shouldly; namespace GitVersion.Core.Tests; @@ -22,13 +20,13 @@ public static class GitToolsTestingExtensions public static ICommit CreateMockCommit() { var objectId = Substitute.For(); - objectId.Sha.Returns(Guid.NewGuid().ToString("n") + "00000000"); - + var sha = Guid.NewGuid().ToString("n") + "00000000"; + objectId.Sha.Returns(sha); var commit = Substitute.For(); commit.Id.Returns(objectId); - commit.Sha.Returns(objectId.Sha); + commit.Sha.Returns(sha); commit.Message.Returns("Commit " + commitCount++); - commit.Parents.Returns(Enumerable.Empty()); + commit.Parents.Returns([]); commit.When.Returns(when.AddSeconds(1)); return commit; } @@ -42,54 +40,63 @@ public static IBranch CreateMockBranch(string name, params ICommit[] commits) branch.Tip.Returns(commits.FirstOrDefault()); var commitsCollection = Substitute.For(); - commitsCollection.GetEnumerator().Returns(_ => ((IEnumerable)commits).GetEnumerator()); + commitsCollection.MockCollectionReturn(commits); commitsCollection.GetCommitsPriorTo(Arg.Any()).Returns(commits); branch.Commits.Returns(commitsCollection); return branch; } - public static IBranch? FindBranch(this IGitRepository repository, string branchName) => repository.Branches.FirstOrDefault(x => x.Name.WithoutRemote == branchName); + public static IBranch FindBranch(this IGitRepository repository, string branchName) + => repository.Branches.FirstOrDefault(branch => branch.Name.WithoutOrigin == branchName) + ?? throw new GitVersionException($"Branch {branchName} not found"); - public static void DumpGraph(this IGitRepository repository, Action? writer = null, int? maxCommits = null) => GitExtensions.DumpGraph(repository.Path, writer, maxCommits); + public static void DumpGraph(this IGitRepository repository, Action? writer = null, int? maxCommits = null) + => GitExtensions.DumpGraph(repository.Path, writer, maxCommits); - public static void DumpGraph(this IRepository repository, Action? writer = null, int? maxCommits = null) => GitExtensions.DumpGraph(repository.ToGitRepository().Path, writer, maxCommits); + public static void DumpGraph(this IRepository repository, Action? writer = null, int? maxCommits = null) + => GitExtensions.DumpGraph(repository.ToGitRepository().Path, writer, maxCommits); - public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Config? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? branch = null) + public static GitVersionVariables GetVersion(this RepositoryFixtureBase fixture, IGitVersionConfiguration? configuration = null, + IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) { - configuration ??= new ConfigurationBuilder().Build(); - repository ??= fixture.Repository; + configuration ??= GitFlowConfigurationBuilder.New.Build(); + var overrideConfiguration = new Dictionary(); var options = Options.Create(new GitVersionOptions { WorkingDirectory = repository.Info.WorkingDirectory, - ConfigInfo = { OverrideConfig = configuration }, + ConfigurationInfo = { OverrideConfiguration = overrideConfiguration }, RepositoryInfo = { - TargetBranch = branch, + TargetBranch = targetBranch, CommitId = commitId }, Settings = { OnlyTrackedBranches = onlyTrackedBranches } }); - var sp = ConfigureServices(services => services.AddSingleton(options)); - - var variableProvider = sp.GetRequiredService(); - var nextVersionCalculator = sp.GetRequiredService(); - var contextOptions = sp.GetRequiredService>(); - - var context = contextOptions.Value; - try { - var nextVersion = nextVersionCalculator.FindVersion(); - var variables = variableProvider.GetVariablesFor(nextVersion.IncrementedVersion, nextVersion.Configuration, context.IsCurrentCommitTagged); + var configurationProviderMock = Substitute.For(); + configurationProviderMock.Provide(overrideConfiguration).Returns(configuration); + var sp = ConfigureServices(services => + { + services.AddSingleton(options); + services.AddSingleton(configurationProviderMock); + }); + var variableProvider = sp.GetRequiredService(); + var nextVersionCalculator = sp.GetRequiredService(); + var contextOptions = sp.GetRequiredService>(); + + var context = contextOptions.Value; + + var semanticVersion = nextVersionCalculator.FindVersion(); - return variables; + var effectiveConfiguration = context.Configuration.GetEffectiveConfiguration(context.CurrentBranch.Name); + return variableProvider.GetVariablesFor(semanticVersion, context.Configuration, effectiveConfiguration.PreReleaseWeight); } catch (Exception) { - Console.WriteLine("Test failing, dumping repository graph"); repository.DumpGraph(); throw; } @@ -97,32 +104,23 @@ public static VersionVariables GetVersion(this RepositoryFixtureBase fixture, Co public static void WriteVersionVariables(this RepositoryFixtureBase fixture, string versionFile) { - var versionInfo = fixture.GetVersion(); + var versionVariables = fixture.GetVersion(); using var stream = File.Open(versionFile, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite); using var writer = new StreamWriter(stream); - writer.Write(versionInfo.ToString()); + writer.Write(versionVariables.ToJson()); } - public static void AssertFullSemver(this RepositoryFixtureBase fixture, string fullSemver, Config? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) + public static void AssertFullSemver(this RepositoryFixtureBase fixture, string fullSemver, + IGitVersionConfiguration? configuration = null, IRepository? repository = null, string? commitId = null, bool onlyTrackedBranches = true, string? targetBranch = null) { - configuration ??= new Config(); - configuration = new ConfigurationBuilder().Add(configuration).Build(); - Console.WriteLine("---------"); + repository ??= fixture.Repository; - try - { - var variables = fixture.GetVersion(configuration, repository, commitId, onlyTrackedBranches, targetBranch); - variables.FullSemVer.ShouldBe(fullSemver); - } - catch (Exception) - { - (repository ?? fixture.Repository).DumpGraph(); - throw; - } + var variables = GetVersion(fixture, configuration, repository, commitId, onlyTrackedBranches, targetBranch); + variables.FullSemVer.ShouldBe(fullSemver); if (commitId == null) { - fixture.SequenceDiagram.NoteOver(fullSemver, fixture.Repository.Head.FriendlyName, color: "#D3D3D3"); + fixture.SequenceDiagram.NoteOver(fullSemver, repository.Head.FriendlyName, color: "#D3D3D3"); } } @@ -150,6 +148,13 @@ public static void InitializeRepo(this RemoteRepositoryFixture fixture) gitPreparer.Prepare(); } + internal static IGitRepository ToGitRepository(this IRepository repository) + { + var gitRepository = new GitRepository(new NullLog()); + gitRepository.DiscoverRepository(repository.Info.Path); + return gitRepository; + } + private static IServiceProvider ConfigureServices(Action? servicesOverrides = null) { var services = new ServiceCollection() diff --git a/src/GitVersion.Core.Tests/Extensions/GitVersionVariablesExtensions.cs b/src/GitVersion.Core.Tests/Extensions/GitVersionVariablesExtensions.cs new file mode 100644 index 0000000000..063470e5a3 --- /dev/null +++ b/src/GitVersion.Core.Tests/Extensions/GitVersionVariablesExtensions.cs @@ -0,0 +1,18 @@ +using GitVersion.OutputVariables; + +namespace GitVersion.Core.Tests; + +public static class GitVersionVariablesExtensions +{ + public static string ToJson(this GitVersionVariables gitVersionVariables) + { + var serializer = new VersionVariableSerializer(new FileSystem()); + return serializer.ToJson(gitVersionVariables); + } + + public static GitVersionVariables ToGitVersionVariables(this string json) + { + var serializer = new VersionVariableSerializer(new FileSystem()); + return serializer.FromJson(json); + } +} diff --git a/src/GitVersion.Core.Tests/Extensions/MockCollectionExtensions.cs b/src/GitVersion.Core.Tests/Extensions/MockCollectionExtensions.cs new file mode 100644 index 0000000000..7feb8ed156 --- /dev/null +++ b/src/GitVersion.Core.Tests/Extensions/MockCollectionExtensions.cs @@ -0,0 +1,15 @@ +namespace GitVersion.Core.Tests; + +public static class MockCollectionExtensions +{ + private static IEnumerator GetEnumerator(params T[] itemsToReturn) + { + foreach (var item in itemsToReturn) + { + yield return item; + } + } + + public static void MockCollectionReturn(this IEnumerable items, params T[] itemsToReturn) + => items.GetEnumerator().Returns(_ => GetEnumerator(itemsToReturn)); +} diff --git a/src/GitVersion.Core.Tests/Extensions/StringFormatWithExtensionTests.cs b/src/GitVersion.Core.Tests/Extensions/StringFormatWithExtensionTests.cs index d73a1d0a9c..3d2499f1d0 100644 --- a/src/GitVersion.Core.Tests/Extensions/StringFormatWithExtensionTests.cs +++ b/src/GitVersion.Core.Tests/Extensions/StringFormatWithExtensionTests.cs @@ -1,6 +1,5 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; -using NUnit.Framework; namespace GitVersion.Core.Tests; @@ -18,7 +17,7 @@ public void FormatWithNoTokens() var propertyObject = new { }; const string expected = "Some String without tokens"; var actual = expected.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -28,7 +27,7 @@ public void FormatWithSingleSimpleToken() const string target = "{SomeProperty}"; const string expected = "SomeValue"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -38,7 +37,7 @@ public void FormatWithMultipleTokensAndVerbatimText() const string target = "{SomeProperty} some text {AnotherProperty}"; const string expected = "SomeValue some text Other Value"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -49,7 +48,7 @@ public void FormatWithEnvVarToken() const string target = "{env:GIT_VERSION_TEST_VAR}"; const string expected = "Env Var Value"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -60,7 +59,7 @@ public void FormatWithEnvVarTokenWithFallback() const string target = "{env:GIT_VERSION_TEST_VAR ?? fallback}"; const string expected = "Env Var Value"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -71,7 +70,7 @@ public void FormatWithUnsetEnvVarToken_WithFallback() const string target = "{env:GIT_VERSION_UNSET_TEST_VAR ?? fallback}"; const string expected = "fallback"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -92,7 +91,7 @@ public void FormatWithMultipleEnvVars() const string target = "{env:GIT_VERSION_TEST_VAR_1} and {env:GIT_VERSION_TEST_VAR_2}"; const string expected = "Val-1 and Val-2"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -103,7 +102,7 @@ public void FormatWithMultipleEnvChars() const string target = "{env:env:GIT_VERSION_TEST_VAR_1} and {env:DUMMY_VAR ?? fallback}"; const string expected = "{env:env:GIT_VERSION_TEST_VAR_1} and fallback"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] @@ -113,7 +112,7 @@ public void FormatWithMultipleFallbackChars() //Test the greediness of the regex in matching env: and ?? chars const string target = "{env:env:GIT_VERSION_TEST_VAR_1} and {env:DUMMY_VAR ??? fallback}"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(target, actual); + Assert.That(actual, Is.EqualTo(target)); } [Test] @@ -124,7 +123,7 @@ public void FormatWithSingleFallbackChar() //Test the sanity of the regex when there is a grammar mismatch const string target = "{en:DUMMY_ENV_VAR} and {env:DUMMY_ENV_VAR??fallback}"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(target, actual); + Assert.That(actual, Is.EqualTo(target)); } [Test] @@ -134,7 +133,7 @@ public void FormatWIthNullPropagationWithMultipleSpaces() const string target = "{SomeProperty} and {env:DUMMY_ENV_VAR ?? fallback}"; const string expected = "Some Value and fallback"; var actual = target.FormatWith(propertyObject, this.environment); - Assert.AreEqual(expected, actual); + Assert.That(actual, Is.EqualTo(expected)); } [Test] diff --git a/src/GitVersion.Core.Tests/GitVersion.Core.Tests.csproj b/src/GitVersion.Core.Tests/GitVersion.Core.Tests.csproj index ee8b8148db..446ac51a69 100644 --- a/src/GitVersion.Core.Tests/GitVersion.Core.Tests.csproj +++ b/src/GitVersion.Core.Tests/GitVersion.Core.Tests.csproj @@ -1,28 +1,27 @@ - net48;netcoreapp3.1;net5.0;net6.0 - full false true - - true - - - - - - + + + + + + - + + + + diff --git a/src/GitVersion.Core.Tests/Helpers/AssemblyParallelizable.cs b/src/GitVersion.Core.Tests/Helpers/AssemblyParallelizable.cs index 9ae285d9ea..fdd365b7e2 100644 --- a/src/GitVersion.Core.Tests/Helpers/AssemblyParallelizable.cs +++ b/src/GitVersion.Core.Tests/Helpers/AssemblyParallelizable.cs @@ -1,3 +1 @@ -using NUnit.Framework; - [assembly: Parallelizable(ParallelScope.Fixtures)] diff --git a/src/GitVersion.Core.Tests/Helpers/DirectoryHelper.cs b/src/GitVersion.Core.Tests/Helpers/DirectoryHelper.cs index 4089986900..d7c6f74f02 100644 --- a/src/GitVersion.Core.Tests/Helpers/DirectoryHelper.cs +++ b/src/GitVersion.Core.Tests/Helpers/DirectoryHelper.cs @@ -24,7 +24,7 @@ public static void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo targ } } - private static string Rename(string name) => ToRename.ContainsKey(name) ? ToRename[name] : name; + private static string Rename(string name) => ToRename.GetValueOrDefault(name, name); public static void DeleteSubDirectories(string parentPath) { @@ -73,7 +73,7 @@ public static void DeleteDirectory(string directoryPath) "{0}Known and common causes include:" + "{0}- Windows Search Indexer (go to the Indexing Options, in the Windows Control Panel, and exclude the bin folder of LibGit2Sharp.Tests)" + "{0}- Antivirus (exclude the bin folder of LibGit2Sharp.Tests from the paths scanned by your real-time antivirus){0}", - System.Environment.NewLine, Path.GetFullPath(directoryPath))); + PathHelper.NewLine, Path.GetFullPath(directoryPath))); } } } diff --git a/src/GitVersion.Core.Tests/Helpers/ExecutableHelper.cs b/src/GitVersion.Core.Tests/Helpers/ExecutableHelper.cs index eae4da3a5e..d220bfa157 100644 --- a/src/GitVersion.Core.Tests/Helpers/ExecutableHelper.cs +++ b/src/GitVersion.Core.Tests/Helpers/ExecutableHelper.cs @@ -4,20 +4,9 @@ namespace GitVersion.Core.Tests.Helpers; public static class ExecutableHelper { - public static string GetCurrentDirectory() => Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? throw new InvalidOperationException(); + public static string GetDotNetExecutable() => "dotnet"; - public static string GetExecutable() => RuntimeHelper.IsCoreClr() ? "dotnet" : PathHelper.Combine(GetExeDirectory(), "gitversion.exe"); + public static string GetExecutableArgs(string args) => $"{PathHelper.Combine(GetExeDirectory(), "gitversion.dll")} {args}"; - public static string GetExecutableArgs(string args) - { - if (RuntimeHelper.IsCoreClr()) - { - args = $"{PathHelper.Combine(GetExeDirectory(), "gitversion.dll")} {args}"; - } - return args; - } - - public static string GetTempPath() => PathHelper.Combine(GetCurrentDirectory(), "TestRepositories", Guid.NewGuid().ToString()); - - private static string GetExeDirectory() => GetCurrentDirectory().Replace("GitVersion.App.Tests", "GitVersion.App"); + private static string GetExeDirectory() => PathHelper.GetCurrentDirectory().Replace("GitVersion.App.Tests", "GitVersion.App"); } diff --git a/src/GitVersion.Core.Tests/Helpers/GitVersionContextBuilder.cs b/src/GitVersion.Core.Tests/Helpers/GitVersionContextBuilder.cs index b8558d13f9..eb76416658 100644 --- a/src/GitVersion.Core.Tests/Helpers/GitVersionContextBuilder.cs +++ b/src/GitVersion.Core.Tests/Helpers/GitVersionContextBuilder.cs @@ -1,20 +1,18 @@ -using GitTools.Testing; -using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NSubstitute; namespace GitVersion.Core.Tests; -public class GitVersionContextBuilder +public class GitVersionContextBuilder : IDisposable { private IGitRepository? repository; - private Config? configuration; - public IServiceProvider? ServicesProvider; + private EmptyRepositoryFixture? emptyRepositoryFixture; + private IReadOnlyDictionary? overrideConfiguration; private Action? overrideServices; + public IServiceProvider? ServicesProvider; public GitVersionContextBuilder WithRepository(IGitRepository gitRepository) { @@ -22,9 +20,9 @@ public GitVersionContextBuilder WithRepository(IGitRepository gitRepository) return this; } - public GitVersionContextBuilder WithConfig(Config config) + public GitVersionContextBuilder WithOverrideConfiguration(IReadOnlyDictionary? value) { - this.configuration = config; + this.overrideConfiguration = value; return this; } @@ -51,7 +49,7 @@ private GitVersionContextBuilder AddBranch(string branchName) var branches = this.repository.Branches.ToList(); branches.Add(mockBranch); - this.repository.Branches.GetEnumerator().Returns(_ => ((IEnumerable)branches).GetEnumerator()); + this.repository.Branches.MockCollectionReturn([.. branches]); this.repository.Head.Returns(mockBranch); return this; } @@ -60,15 +58,8 @@ public void Build() { var repo = this.repository ?? CreateRepository(); - var config = new ConfigurationBuilder() - .Add(this.configuration ?? new Config()) - .Build(); - - var options = Options.Create(new GitVersionOptions - { - WorkingDirectory = new EmptyRepositoryFixture().RepositoryPath, - ConfigInfo = { OverrideConfig = config } - }); + emptyRepositoryFixture = new(); + var options = Options.Create(new GitVersionOptions { WorkingDirectory = emptyRepositoryFixture.RepositoryPath, ConfigurationInfo = { OverrideConfiguration = this.overrideConfiguration } }); this.ServicesProvider = ConfigureServices(services => { @@ -83,7 +74,7 @@ private static IGitRepository CreateRepository() var mockCommit = GitToolsTestingExtensions.CreateMockCommit(); var mockBranch = GitToolsTestingExtensions.CreateMockBranch(TestBase.MainBranch, mockCommit); var branches = Substitute.For(); - branches.GetEnumerator().Returns(_ => ((IEnumerable)new[] { mockBranch }).GetEnumerator()); + branches.MockCollectionReturn(mockBranch); var mockRepository = Substitute.For(); mockRepository.Branches.Returns(branches); @@ -102,4 +93,21 @@ private static IServiceProvider ConfigureServices(Action? ov return services.BuildServiceProvider(); } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (!disposing) + { + return; + } + + this.repository?.Dispose(); + this.emptyRepositoryFixture?.Dispose(); + } } diff --git a/src/GitVersion.Core.Tests/Helpers/GitVersionCoreTestModule.cs b/src/GitVersion.Core.Tests/Helpers/GitVersionCoreTestModule.cs index 5784f11a65..e6410ceb26 100644 --- a/src/GitVersion.Core.Tests/Helpers/GitVersionCoreTestModule.cs +++ b/src/GitVersion.Core.Tests/Helpers/GitVersionCoreTestModule.cs @@ -1,5 +1,8 @@ +using GitVersion.Agents; +using GitVersion.Configuration; using GitVersion.Extensions; using GitVersion.Logging; +using GitVersion.Output; using Microsoft.Extensions.DependencyInjection; namespace GitVersion.Core.Tests.Helpers; @@ -9,6 +12,9 @@ public class GitVersionCoreTestModule : IGitVersionModule public void RegisterTypes(IServiceCollection services) { services.AddModule(new GitVersionLibGit2SharpModule()); + services.AddModule(new GitVersionBuildAgentsModule()); + services.AddModule(new GitVersionOutputModule()); + services.AddModule(new GitVersionConfigurationModule()); services.AddModule(new GitVersionCoreModule()); services.AddSingleton(); diff --git a/src/GitVersion.Core.Tests/Helpers/RuntimeHelper.cs b/src/GitVersion.Core.Tests/Helpers/RuntimeHelper.cs deleted file mode 100644 index 315bf717d1..0000000000 --- a/src/GitVersion.Core.Tests/Helpers/RuntimeHelper.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace GitVersion.Core.Tests.Helpers; - -public static class RuntimeHelper -{ -#if !NETFRAMEWORK - private static bool? _isCoreClr; -#endif - - public static bool IsCoreClr() - { -#if !NETFRAMEWORK - _isCoreClr ??= System.Environment.Version.Major >= 5 - || System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.StartsWith(".NET Core"); - return _isCoreClr.Value; -#else -#pragma warning disable IDE0022 // Use expression body for methods // Cannot be set because of the pragma section - return false; -#pragma warning restore IDE0022 // Use expression body for methods -#endif - } -} diff --git a/src/GitVersion.Core.Tests/Helpers/TestBase.cs b/src/GitVersion.Core.Tests/Helpers/TestBase.cs index 4a9fd08050..cd25bd8a27 100644 --- a/src/GitVersion.Core.Tests/Helpers/TestBase.cs +++ b/src/GitVersion.Core.Tests/Helpers/TestBase.cs @@ -1,6 +1,5 @@ -using GitVersion.Configuration; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -8,9 +7,6 @@ namespace GitVersion.Core.Tests.Helpers; public class TestBase { - protected const string NoMonoDescription = "Won't run on Mono due to source information not being available for ShouldMatchApproved."; - protected const string NoMono = "NoMono"; - protected const string NoNet48 = "NoNet48"; public const string MainBranch = "main"; protected static IServiceProvider ConfigureServices(Action? overrideServices = null) @@ -23,14 +19,14 @@ protected static IServiceProvider ConfigureServices(Action? return services.BuildServiceProvider(); } - protected static IServiceProvider BuildServiceProvider(string workingDirectory, IGitRepository repository, string branch, Config? config = null) + protected static IServiceProvider BuildServiceProvider(IGitRepository repository, + string? targetBranch = null, IReadOnlyDictionary? configuration = null) { - config ??= new ConfigurationBuilder().Build(); var options = Options.Create(new GitVersionOptions { - WorkingDirectory = workingDirectory, - ConfigInfo = { OverrideConfig = config }, - RepositoryInfo = { TargetBranch = branch } + WorkingDirectory = repository.Path, + ConfigurationInfo = { OverrideConfiguration = configuration }, + RepositoryInfo = { TargetBranch = targetBranch } }); var sp = ConfigureServices(services => diff --git a/src/GitVersion.Core.Tests/Helpers/TestConfigurationBuilder.cs b/src/GitVersion.Core.Tests/Helpers/TestConfigurationBuilder.cs deleted file mode 100644 index 150d96a939..0000000000 --- a/src/GitVersion.Core.Tests/Helpers/TestConfigurationBuilder.cs +++ /dev/null @@ -1,161 +0,0 @@ -using GitVersion.Configuration; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; - -namespace GitVersion.Core.Tests.Helpers; - -public sealed class TestConfigurationBuilder -{ - public static TestConfigurationBuilder New => new(); - - private string? nextVerson; - private VersioningMode? versioningMode; - private readonly Dictionary versioningModeDictionary = new(); - private bool withoutAnyTrackMergeTargets; - private readonly Dictionary trackMergeTargetsDictionary = new(); - private readonly Dictionary preventIncrementOfMergedBranchVersionDictionary = new(); - private IncrementStrategy? increment; - private readonly Dictionary incrementDictionary = new(); - private readonly Dictionary tagDictionary = new(); - private IgnoreConfig? ignoreConfig; - - private TestConfigurationBuilder() - { - withoutAnyTrackMergeTargets = false; - increment = IncrementStrategy.Inherit; - versioningMode = VersioningMode.ContinuousDelivery; - } - - public TestConfigurationBuilder WithNextVersion(string? value) - { - nextVerson = value; - return this; - } - - public TestConfigurationBuilder WithVersioningMode(VersioningMode value) - { - versioningMode = value; - return this; - } - - public TestConfigurationBuilder WithoutVersioningMode() - { - versioningMode = null; - return this; - } - - public TestConfigurationBuilder WithVersioningMode(string branch, VersioningMode value) - { - versioningModeDictionary[branch] = value; - return this; - } - - public TestConfigurationBuilder WithoutVersioningMode(string branch) - { - versioningModeDictionary[branch] = null; - return this; - } - - public TestConfigurationBuilder WithTrackMergeTarget(string branch, bool value) - { - trackMergeTargetsDictionary[branch] = value; - return this; - } - - public TestConfigurationBuilder WithoutAnyTrackMergeTargets() - { - withoutAnyTrackMergeTargets = true; - trackMergeTargetsDictionary.Clear(); - return this; - } - - public TestConfigurationBuilder WithPreventIncrementOfMergedBranchVersion(string branch, bool value) - { - preventIncrementOfMergedBranchVersionDictionary[branch] = value; - return this; - } - - public TestConfigurationBuilder WithIncrement(IncrementStrategy? value) - { - increment = value; - return this; - } - - public TestConfigurationBuilder WithIncrement(string branch, IncrementStrategy value) - { - incrementDictionary[branch] = value; - return this; - } - - public TestConfigurationBuilder WithoutTag(string branch) - { - tagDictionary[branch] = null; - return this; - } - - public TestConfigurationBuilder WithTag(string branch, string value) - { - tagDictionary[branch] = value; - return this; - } - - public TestConfigurationBuilder WithIgnoreConfig(IgnoreConfig value) - { - ignoreConfig = value; - return this; - } - - public Config Build() - { - Config configuration = new() - { - NextVersion = nextVerson, - VersioningMode = versioningMode - }; - - if (ignoreConfig != null) - { - configuration.Ignore = ignoreConfig; - } - - ConfigurationBuilder configurationBuilder = new(); - configuration = configurationBuilder.Add(configuration).Build(); - - if (withoutAnyTrackMergeTargets) - { - foreach (var branchConfiguration in configuration.Branches.Values) - { - branchConfiguration.TrackMergeTarget = false; - } - } - - foreach (var item in trackMergeTargetsDictionary) - { - configuration.Branches[item.Key].TrackMergeTarget = item.Value; - } - - foreach (var item in versioningModeDictionary) - { - configuration.Branches[item.Key].VersioningMode = item.Value; - } - - foreach (var item in preventIncrementOfMergedBranchVersionDictionary) - { - configuration.Branches[item.Key].PreventIncrementOfMergedBranchVersion = item.Value; - } - - configuration.Increment = increment; - - foreach (var item in incrementDictionary) - { - configuration.Branches[item.Key].Increment = item.Value; - } - - foreach (var item in tagDictionary) - { - configuration.Branches[item.Key].Tag = item.Value; - } - - return configuration; - } -} diff --git a/src/GitVersion.Core.Tests/Helpers/TestConsole.cs b/src/GitVersion.Core.Tests/Helpers/TestConsole.cs index a5ea2eb590..6484730db2 100644 --- a/src/GitVersion.Core.Tests/Helpers/TestConsole.cs +++ b/src/GitVersion.Core.Tests/Helpers/TestConsole.cs @@ -1,21 +1,16 @@ +using GitVersion.Helpers; using GitVersion.Logging; namespace GitVersion.Core.Tests.Helpers; -public class TestConsole : IConsole +public class TestConsole(params string[] responses) : IConsole { - private readonly Queue responses; - private readonly ILog log; + private readonly Queue responses = new(responses); + private readonly ILog log = new NullLog(); - public TestConsole(params string[] responses) - { - this.log = new NullLog(); - this.responses = new Queue(responses); - } - - public void WriteLine(string? msg) => this.log.Info(msg + System.Environment.NewLine); + public void WriteLine(string? msg) => this.log.Info(msg + PathHelper.NewLine); - public void WriteLine() => this.log.Info(System.Environment.NewLine); + public void WriteLine() => this.log.Info(PathHelper.NewLine); public void Write(string? msg) => this.log.Info(msg ?? throw new ArgumentNullException(nameof(msg))); diff --git a/src/GitVersion.Core.Tests/Helpers/TestConsoleAdapter.cs b/src/GitVersion.Core.Tests/Helpers/TestConsoleAdapter.cs new file mode 100644 index 0000000000..cf136b9934 --- /dev/null +++ b/src/GitVersion.Core.Tests/Helpers/TestConsoleAdapter.cs @@ -0,0 +1,19 @@ +using GitVersion.Helpers; +using GitVersion.Logging; + +namespace GitVersion.Core.Tests.Helpers; + +public class TestConsoleAdapter(StringBuilder sb) : IConsole +{ + public void WriteLine(string? msg) => sb.AppendLine(msg); + + public void WriteLine() => sb.AppendLine(); + + public void Write(string? msg) => sb.Append(msg); + + public override string ToString() => sb.ToString(); + + public string ReadLine() => throw new NotImplementedException(); + + public IDisposable UseColor(ConsoleColor consoleColor) => Disposable.Empty; +} diff --git a/src/GitVersion.Core.Tests/Helpers/TestEffectiveConfiguration.cs b/src/GitVersion.Core.Tests/Helpers/TestEffectiveConfiguration.cs deleted file mode 100644 index 298e63fc1c..0000000000 --- a/src/GitVersion.Core.Tests/Helpers/TestEffectiveConfiguration.cs +++ /dev/null @@ -1,71 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; - -namespace GitVersion.Core.Tests.Helpers; - -public class TestEffectiveConfiguration : EffectiveConfiguration -{ - public TestEffectiveConfiguration( - AssemblyVersioningScheme assemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch, - AssemblyFileVersioningScheme assemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch, - string? assemblyVersioningFormat = null, - string? assemblyFileVersioningFormat = null, - string? assemblyInformationalFormat = null, - VersioningMode versioningMode = VersioningMode.ContinuousDelivery, - string tagPrefix = Config.DefaultTagPrefix, - string tag = "", - string? nextVersion = null, - string branchPrefixToTrim = "", - bool preventIncrementOfMergedBranchVersion = false, - string? tagNumberPattern = null, - string continuousDeploymentFallbackTag = "ci", - bool trackMergeTarget = false, - string? majorMessage = null, - string? minorMessage = null, - string? patchMessage = null, - string? noBumpMessage = null, - CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled, - int legacySemVerPadding = 4, - int buildMetaDataPadding = 4, - int commitsSinceVersionSourcePadding = 4, - IEnumerable? versionFilters = null, - bool tracksReleaseBranches = false, - bool isRelease = false, - bool isMainline = false, - string commitDateFormat = "yyyy-MM-dd", - bool updateBuildNumber = false) : - base(assemblyVersioningScheme, - assemblyFileVersioningScheme, - assemblyInformationalFormat, - assemblyVersioningFormat, - assemblyFileVersioningFormat, - versioningMode, - tagPrefix, - tag, - nextVersion, - IncrementStrategy.Patch, - branchPrefixToTrim, - preventIncrementOfMergedBranchVersion, - tagNumberPattern, - continuousDeploymentFallbackTag, - trackMergeTarget, - majorMessage, - minorMessage, - patchMessage, - noBumpMessage, - commitMessageMode, - legacySemVerPadding, - buildMetaDataPadding, - commitsSinceVersionSourcePadding, - versionFilters ?? Enumerable.Empty(), - tracksReleaseBranches, - isRelease, - isMainline, - commitDateFormat, - updateBuildNumber, - 0, - 0) - { - } -} diff --git a/src/GitVersion.Core.Tests/Helpers/TestEnvironment.cs b/src/GitVersion.Core.Tests/Helpers/TestEnvironment.cs index a4435ffdbe..b5f6b22e76 100644 --- a/src/GitVersion.Core.Tests/Helpers/TestEnvironment.cs +++ b/src/GitVersion.Core.Tests/Helpers/TestEnvironment.cs @@ -2,9 +2,7 @@ namespace GitVersion.Core.Tests.Helpers; public class TestEnvironment : IEnvironment { - private readonly IDictionary map; - - public TestEnvironment() => this.map = new Dictionary(); + private readonly IDictionary map = new Dictionary(); public string? GetEnvironmentVariable(string variableName) => this.map.TryGetValue(variableName, out var val) ? val : null; diff --git a/src/GitVersion.Core.Tests/Helpers/TestFileSystem.cs b/src/GitVersion.Core.Tests/Helpers/TestFileSystem.cs index 1148266487..06a4f74ee4 100644 --- a/src/GitVersion.Core.Tests/Helpers/TestFileSystem.cs +++ b/src/GitVersion.Core.Tests/Helpers/TestFileSystem.cs @@ -4,7 +4,7 @@ namespace GitVersion.Core.Tests.Helpers; public class TestFileSystem : IFileSystem { - private readonly Dictionary fileSystem = new(StringComparerUtils.OsDependentComparer); + private readonly Dictionary fileSystem = new(SysEnv.OSVersion.Platform == PlatformID.Unix ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase); public void Copy(string from, string to, bool overwrite) { @@ -56,8 +56,7 @@ public string ReadAllText(string path) public void WriteAllText(string? file, string fileContents) { var path = Path.GetFullPath(file ?? throw new ArgumentNullException(nameof(file))); - var encoding = this.fileSystem.ContainsKey(path) - ? EncodingHelper.DetectEncoding(this.fileSystem[path]) ?? Encoding.UTF8 + var encoding = fileSystem.TryGetValue(path, out var value) ? EncodingHelper.DetectEncoding(value) ?? Encoding.UTF8 : Encoding.UTF8; WriteAllText(path, fileContents, encoding); } @@ -75,24 +74,16 @@ public void WriteAllText(string? file, string fileContents, Encoding encoding) public Stream OpenRead(string path) { var fullPath = Path.GetFullPath(path); - if (!this.fileSystem.ContainsKey(fullPath)) + if (!this.fileSystem.TryGetValue(fullPath, out var content)) throw new FileNotFoundException("File not found.", fullPath); - var content = this.fileSystem[fullPath]; return new MemoryStream(content); } public void CreateDirectory(string path) { var fullPath = Path.GetFullPath(path); - if (this.fileSystem.ContainsKey(fullPath)) - { - this.fileSystem[fullPath] = Array.Empty(); - } - else - { - this.fileSystem.Add(fullPath, Array.Empty()); - } + this.fileSystem[fullPath] = []; } public bool DirectoryExists(string path) @@ -102,9 +93,4 @@ public bool DirectoryExists(string path) } public long GetLastDirectoryWrite(string path) => 1; - - public bool PathsEqual(string? path, string? otherPath) => string.Equals( - Path.GetFullPath(path ?? throw new ArgumentNullException(nameof(path))).TrimEnd('\\').TrimEnd('/'), - Path.GetFullPath(otherPath ?? throw new ArgumentNullException(nameof(otherPath))).TrimEnd('\\').TrimEnd('/'), - StringComparerUtils.OsDependentComparison); } diff --git a/src/GitVersion.Core.Tests/Helpers/TestLogAppender.cs b/src/GitVersion.Core.Tests/Helpers/TestLogAppender.cs index 54483a0e8d..5bbd6cae9d 100644 --- a/src/GitVersion.Core.Tests/Helpers/TestLogAppender.cs +++ b/src/GitVersion.Core.Tests/Helpers/TestLogAppender.cs @@ -2,10 +2,7 @@ namespace GitVersion.Core.Tests.Helpers; -public class TestLogAppender : ILogAppender +public class TestLogAppender(Action logAction) : ILogAppender { - private readonly Action logAction; - - public TestLogAppender(Action logAction) => this.logAction = logAction; - public void WriteTo(LogLevel level, string message) => this.logAction(message); + public void WriteTo(LogLevel level, string message) => logAction(message); } diff --git a/src/GitVersion.Core.Tests/Helpers/TestStream.cs b/src/GitVersion.Core.Tests/Helpers/TestStream.cs index d69fda5321..836a45474f 100644 --- a/src/GitVersion.Core.Tests/Helpers/TestStream.cs +++ b/src/GitVersion.Core.Tests/Helpers/TestStream.cs @@ -1,17 +1,9 @@ namespace GitVersion.Core.Tests.Helpers; -public class TestStream : Stream +public class TestStream(string path, IFileSystem testFileSystem) : Stream { - private readonly string path; - private readonly TestFileSystem testFileSystem; private readonly MemoryStream underlying = new(); - public TestStream(string path, TestFileSystem testFileSystem) - { - this.path = path; - this.testFileSystem = testFileSystem; - } - protected override void Dispose(bool disposing) { Flush(); @@ -22,7 +14,7 @@ public override void Flush() { this.underlying.Position = 0; var readToEnd = new StreamReader(this.underlying).ReadToEnd(); - this.testFileSystem.WriteAllText(this.path, readToEnd); + testFileSystem.WriteAllText(path, readToEnd); } public override long Seek(long offset, SeekOrigin origin) => this.underlying.Seek(offset, origin); diff --git a/src/GitVersion.Core.Tests/Helpers/TestableGitVersionVariables.cs b/src/GitVersion.Core.Tests/Helpers/TestableGitVersionVariables.cs new file mode 100644 index 0000000000..5670ca86a3 --- /dev/null +++ b/src/GitVersion.Core.Tests/Helpers/TestableGitVersionVariables.cs @@ -0,0 +1,29 @@ +using GitVersion.OutputVariables; + +namespace GitVersion.Core.Tests.Helpers; + +internal record TestableGitVersionVariables() : GitVersionVariables("", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + ""); diff --git a/src/GitVersion.Core.Tests/Helpers/TestableVersionVariables.cs b/src/GitVersion.Core.Tests/Helpers/TestableVersionVariables.cs deleted file mode 100644 index c6cf98e02c..0000000000 --- a/src/GitVersion.Core.Tests/Helpers/TestableVersionVariables.cs +++ /dev/null @@ -1,25 +0,0 @@ -using GitVersion.OutputVariables; - -namespace GitVersion.Core.Tests.Helpers; - -internal class TestableVersionVariables : VersionVariables -{ - public TestableVersionVariables( - string major = "", string minor = "", string patch = "", string buildMetaData = "", - string buildMetaDataPadded = "", string fullBuildMetaData = "", string branchName = "", - string escapedBranchName = "", string sha = "", string shortSha = "", string majorMinorPatch = "", - string semVer = "", string legacySemVer = "", string legacySemVerPadded = "", string fullSemVer = "", - string assemblySemVer = "", string assemblySemFileVer = "", string preReleaseTag = "", - string preReleaseTagWithDash = "", string preReleaseLabel = "", string preReleaseLabelWithDash = "", string preReleaseNumber = "", - string weightedPreReleaseNumber = "", string informationalVersion = "", string commitDate = "", - string nugetVersion = "", string nugetVersionV2 = "", string nugetPreReleaseTag = "", - string nugetPreReleaseTagV2 = "", string versionSourceSha = "", string commitsSinceVersionSource = "", - string commitsSinceVersionSourcePadded = "", string uncommittedChanges = "") : base( - major, minor, patch, buildMetaData, buildMetaDataPadded, fullBuildMetaData, branchName, escapedBranchName, - sha, shortSha, majorMinorPatch, semVer, legacySemVer, legacySemVerPadded, fullSemVer, - assemblySemVer, assemblySemFileVer, preReleaseTag, weightedPreReleaseNumber, preReleaseTagWithDash, - preReleaseLabel, preReleaseLabelWithDash, preReleaseNumber, informationalVersion, commitDate, nugetVersion, nugetVersionV2, - nugetPreReleaseTag, nugetPreReleaseTagV2, versionSourceSha, commitsSinceVersionSource, commitsSinceVersionSourcePadded, uncommittedChanges) - { - } -} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/AlignGitFlowWithMainlineVersionStrategy.cs b/src/GitVersion.Core.Tests/IntegrationTests/AlignGitFlowWithMainlineVersionStrategy.cs new file mode 100644 index 0000000000..704d7fbcec --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/AlignGitFlowWithMainlineVersionStrategy.cs @@ -0,0 +1,11257 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class AlignGitFlowWithMainlineVersionStrategy +{ + private static GitFlowConfigurationBuilder configurationBuilder => GitFlowConfigurationBuilder.New; + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+4", configuration); + } + else + { + // ❔ expected: "2.0.0-2+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+1", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+4", configuration); + } + else + { + // ❔ expected: "2.0.1-1+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+1", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+4", configuration); + } + else + { + // ❔ expected: "2.1.0-1+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+4", configuration); + } + else + { + // ❔ expected: "0.0.0-2+4" + fixture.AssertFullSemver("0.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+4", configuration); + } + else + { + // ❔ expected: "0.0.0-2+4" + fixture.AssertFullSemver("0.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.ApplyTag("0.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+1", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2+4", configuration); + } + else + { + // ❔ expected: "0.0.2-2+4" + fixture.AssertFullSemver("0.0.3-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+1", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+1", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-2+4", configuration); + } + else + { + // ❔ expected: "0.2.0-2+4" + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+1", configuration); + + fixture.ApplyTag("0.2.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-1+4", configuration); + } + else + { + // ❔ expected: "0.2.1-1+4" + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+1", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+4", configuration); + } + else + { + // ❔ expected: "2.0.0-2+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+1", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+4", configuration); + } + else + { + // ❔ expected: "2.0.1-foo.2+3" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+1", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+4", configuration); + } + else + { + // ❔ expected: "2.1.0-1+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+3", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+3", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MergeTo("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+2", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + } + + fixture.MakeACommit("D"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+3", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + } + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+3", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2+6", configuration); + } + else + { + // ❔ expected: "0.0.2-2+6" + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+3", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+3", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+3", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-2+6", configuration); + } + else + { + // ❔ expected: "0.2.0-1+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+3", configuration); + + fixture.ApplyTag("0.2.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-1+6", configuration); + } + else + { + // ❔ expected: "0.2.1-1+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+3", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+3", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+3", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.1-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+2", configuration); + } + else + { + // ❔ expected: "1.0.1-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.1.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+2", configuration); + } + else + { + // ❔ expected: "1.1.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment none on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+2", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+2", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+2", configuration); + } + else + { + // ❔ expected: "0.0.1-1+2" + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+2", configuration); + } + else + { + // ❔ expected: "0.1.0-1+2" + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "0.0.1-PullRequest2.2" + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+2", configuration); + } + else + { + // ❔ expected: "0.0.1-2+2" + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+2", configuration); + } + else + { + // ❔ expected: "0.1.0-1+2" + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "0.1.0-PullRequest2.2" + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+2", configuration); + } + else + { + // ❔ expected: "0.1.0-1+2" + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "0.1.1-PullRequest2.2" + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+2", configuration); + } + else + { + // ❔ expected: "0.1.1-1+2" + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment major on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.1-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+2", configuration); + } + else + { + // ❔ expected: "1.0.1-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.1.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+2", configuration); + } + else + { + // ❔ expected: "1.1.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementInheritOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("2.0.0"); + fixture.ApplyTag("2.0.0"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+4", configuration); + + fixture.ApplyTag("2.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.0.1"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+4", configuration); + + fixture.ApplyTag("2.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment none on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementNoneOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+4", configuration); + + fixture.ApplyTag("0.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ❔ expected: "0.0.0-3+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-4+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+4", configuration); + + fixture.ApplyTag("0.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ❔ expected: "0.0.0-3+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-4+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+4", configuration); + + fixture.ApplyTag("0.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+4", configuration); + + fixture.ApplyTag("0.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment patch on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementPatchOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+4", configuration); + + fixture.ApplyTag("0.0.3-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.4-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+4", configuration); + + fixture.ApplyTag("0.0.2-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2+6", configuration); + } + else + { + // ❔ expected: "0.0.2-2+6" + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.2"); + fixture.ApplyTag("0.0.2"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+4", configuration); + + fixture.ApplyTag("0.0.3-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.4-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+4", configuration); + + fixture.ApplyTag("0.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementMinorOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+4", configuration); + + fixture.ApplyTag("0.3.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.3.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.4.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+4", configuration); + + fixture.ApplyTag("0.2.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-2+6", configuration); + } + else + { + // ❔ expected: "0.2.0-2+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.2.0"); + fixture.ApplyTag("0.2.0"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.1+4", configuration); + + fixture.ApplyTag("0.2.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-1+6", configuration); + } + else + { + // ❔ expected: "0.2.1-1+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.2.1"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+4", configuration); + + fixture.ApplyTag("0.3.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.3.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.4.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementMajorOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("2.0.0"); + fixture.ApplyTag("2.0.0"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+4", configuration); + + fixture.ApplyTag("2.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.0.1"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+4", configuration); + + fixture.ApplyTag("2.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+6", configuration); + } + else + { + // ❔ expected: "1.0.0-2+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("1.0.0"); + fixture.ApplyTag("1.0.0"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+3", configuration); + + fixture.ApplyTag("1.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+6", configuration); + } + else + { + // ❔ expected: "1.0.1-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.0.1"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+3", configuration); + + fixture.ApplyTag("1.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+6", configuration); + } + else + { + // ❔ expected: "1.1.0-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + [TestCase(false, "release/2.0.0")] + [TestCase(true, "release/2.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+6", configuration); + } + else + { + // ❔ expected: "0.0.0-2+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+6", configuration); + } + else + { + // ❔ expected: "0.0.0-2+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+3", configuration); + + fixture.ApplyTag("0.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + [TestCase(true, "release/0.1.1")] + [TestCase(true, "release/0.2.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + } + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+3", configuration); + + fixture.ApplyTag("0.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+6", configuration); + } + else + { + // ❔ expected: "0.0.1-2+6" + fixture.AssertFullSemver("0.0.2-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.1"); + fixture.ApplyTag("0.0.1"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + [TestCase(true, "release/0.1.1")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+3", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+6", configuration); + } + else + { + // ❔ not expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.1.0"); + fixture.ApplyTag("0.1.0"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+3", configuration); + + fixture.ApplyTag("0.1.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+6", configuration); + } + else + { + // ❔ not expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.1.1"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+3", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+6", configuration); + } + else + { + // ❔ expected: "1.0.0-2+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("1.0.0"); + fixture.ApplyTag("1.0.0"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+3", configuration); + + fixture.ApplyTag("1.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+6", configuration); + } + else + { + // ❔ expected: "1.0.1-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.0.1"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+3", configuration); + + fixture.ApplyTag("1.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+6", configuration); + } + else + { + // ❔ expected: "1.1.0-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + [TestCase(false, "release/2.0.0")] + [TestCase(true, "release/2.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/AlignGitHubFlowWithMainlineVersionStrategy.cs b/src/GitVersion.Core.Tests/IntegrationTests/AlignGitHubFlowWithMainlineVersionStrategy.cs new file mode 100644 index 0000000000..9bbf031f12 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/AlignGitHubFlowWithMainlineVersionStrategy.cs @@ -0,0 +1,11257 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class AlignGitHubFlowWithMainlineVersionStrategy +{ + private static GitHubFlowConfigurationBuilder configurationBuilder => GitHubFlowConfigurationBuilder.New; + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+4", configuration); + } + else + { + // ❔ expected: "2.0.0-2+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+1", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+4", configuration); + } + else + { + // ❔ expected: "2.0.1-1+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+1", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+4", configuration); + } + else + { + // ❔ expected: "2.1.0-1+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment inherit on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementInheritOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+4", configuration); + } + else + { + // ❔ expected: "0.0.0-2+4" + fixture.AssertFullSemver("0.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+4", configuration); + } + else + { + // ❔ expected: "0.0.0-2+4" + fixture.AssertFullSemver("0.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.ApplyTag("0.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment none on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementNoneOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+1", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2+4", configuration); + } + else + { + // ❔ expected: "0.0.2-2+4" + fixture.AssertFullSemver("0.0.3-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+1", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment patch on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementPatchOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+1", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-2+4", configuration); + } + else + { + // ❔ expected: "0.2.0-2+4" + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+1", configuration); + + fixture.ApplyTag("0.2.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-1+4", configuration); + } + else + { + // ❔ expected: "0.2.1-1+4" + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+1", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment minor on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMinorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+4", configuration); + } + else + { + // ❔ expected: "2.0.0-2+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+1", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+4", configuration); + } + else + { + // ❔ expected: "2.0.1-foo.2+3" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+1", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+4", configuration); + } + else + { + // ❔ expected: "2.1.0-1+4" + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + } + + /// + /// GitHubFlow - Feature branch (Increment major on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureWithIncrementMajorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+1", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+4", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+3", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+3", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment inherit on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementInheritOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MergeTo("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+2", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + } + + fixture.MakeACommit("D"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+3", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + } + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment none on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementNoneOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+3", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2+6", configuration); + } + else + { + // ❔ expected: "0.0.2-2+6" + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+3", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementPatchOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+3", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+3", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-2+6", configuration); + } + else + { + // ❔ expected: "0.2.0-1+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.1+3", configuration); + + fixture.ApplyTag("0.2.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-1+6", configuration); + } + else + { + // ❔ expected: "0.2.1-1+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.1+3", configuration); + + fixture.ApplyTag("0.3.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment minor on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMinorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.1+3", configuration); + + fixture.ApplyTag("2.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.1+3", configuration); + + fixture.ApplyTag("2.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment major on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeatureWithIncrementMajorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.1+3", configuration); + + fixture.ApplyTag("3.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.1-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+2", configuration); + } + else + { + // ❔ expected: "1.0.1-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.1.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+2", configuration); + } + else + { + // ❔ expected: "1.1.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment inherit on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementInheritOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment none on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+2", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+2", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+2", configuration); + } + else + { + // ❔ expected: "0.0.1-1+2" + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+2", configuration); + } + else + { + // ❔ expected: "0.1.0-1+2" + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment none on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementNoneOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("0.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "0.0.1-PullRequest2.2" + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+2", configuration); + } + else + { + // ❔ expected: "0.0.1-2+2" + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+2", configuration); + } + else + { + // ❔ expected: "0.1.0-1+2" + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementPatchOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("0.0.2-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "0.1.0-PullRequest2.2" + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+2", configuration); + } + else + { + // ❔ expected: "0.1.0-1+2" + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "0.1.1-PullRequest2.2" + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+2", configuration); + } + else + { + // ❔ expected: "0.1.1-1+2" + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment minor on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMinorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("0.2.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndInheritOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment major on main and none on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndNoneOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.None) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+2", configuration); + } + else + { + // ❔ expected: "1.0.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and patch on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndPatchOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.0.1-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+2", configuration); + } + else + { + // ❔ expected: "1.0.1-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and minor on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndMinorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.2", configuration); + } + else + { + // ❔ expected: "1.1.0-PullRequest2.2" + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + } + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+2", configuration); + } + else + { + // ❔ expected: "1.1.0-1+2" + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + } + + /// + /// GitHubFlow - Pull requests (increment major on main and major on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequestWithIncrementMajorOnMainAndMajorOnFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Major) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+2", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementInheritOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("2.0.0"); + fixture.ApplyTag("2.0.0"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+4", configuration); + + fixture.ApplyTag("2.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.0.1"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+4", configuration); + + fixture.ApplyTag("2.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment inherit on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementInheritOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment none on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementNoneOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+4", configuration); + + fixture.ApplyTag("0.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ❔ expected: "0.0.0-3+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-4+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+4", configuration); + + fixture.ApplyTag("0.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+6", configuration); + } + else + { + // ❔ expected: "0.0.0-3+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-4+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+4", configuration); + + fixture.ApplyTag("0.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+4", configuration); + + fixture.ApplyTag("0.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment none on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseBranchWithIncrementNoneOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + } + } + + /// + /// GitHubFlow - Release branch (Increment patch on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementPatchOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+4", configuration); + + fixture.ApplyTag("0.0.3-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.4-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+4", configuration); + + fixture.ApplyTag("0.0.2-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2+6", configuration); + } + else + { + // ❔ expected: "0.0.2-2+6" + fixture.AssertFullSemver("0.0.3-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.2"); + fixture.ApplyTag("0.0.2"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+4", configuration); + + fixture.ApplyTag("0.0.3-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.4-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+4", configuration); + + fixture.ApplyTag("0.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseBranchWithIncrementPatchOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementMinorOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+4", configuration); + + fixture.ApplyTag("0.3.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.3.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.4.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+4", configuration); + + fixture.ApplyTag("0.2.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-2+6", configuration); + } + else + { + // ❔ expected: "0.2.0-2+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.2.0"); + fixture.ApplyTag("0.2.0"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.1+4", configuration); + + fixture.ApplyTag("0.2.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.1-1+6", configuration); + } + else + { + // ❔ expected: "0.2.1-1+6" + fixture.AssertFullSemver("0.3.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.2.1"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.1+4", configuration); + + fixture.ApplyTag("0.3.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.3.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.4.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment minor on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + public void EnsureReleaseBranchWithIncrementMinorOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main) + /// + [TestCase(false, IncrementStrategy.Inherit)] + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseBranchWithIncrementMajorOnMain(bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo("release/3.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and inherit on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndInheritOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndNoneOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+6", configuration); + } + else + { + // ❔ expected: "2.0.0-2+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("2.0.0"); + fixture.ApplyTag("2.0.0"); + } + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and patch on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndPatchOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.1+4", configuration); + + fixture.ApplyTag("2.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+6", configuration); + } + else + { + // ❔ expected: "2.0.1-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.0.1"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and minor on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndMinorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.1+4", configuration); + + fixture.ApplyTag("2.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+6", configuration); + } + else + { + // ❔ expected: "2.1.0-1+6" + fixture.AssertFullSemver("3.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("2.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment major on main and major on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + public void EnsureReleaseBranchWithIncrementMajorOnMainAndMajorOnReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.1+4", configuration); + + fixture.ApplyTag("3.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("3.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("4.0.0-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+6", configuration); + } + else + { + // ❔ expected: "1.0.0-2+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("1.0.0"); + fixture.ApplyTag("1.0.0"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+3", configuration); + + fixture.ApplyTag("1.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+6", configuration); + } + else + { + // ❔ expected: "1.0.1-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.0.1"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+3", configuration); + + fixture.ApplyTag("1.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+6", configuration); + } + else + { + // ❔ expected: "1.1.0-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + [TestCase(false, "release/2.0.0")] + [TestCase(true, "release/2.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementInheritOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Inherit) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+6", configuration); + } + else + { + // ❔ expected: "0.0.0-2+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.1+3", configuration); + + fixture.ApplyTag("0.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-2+6", configuration); + } + else + { + // ❔ expected: "0.0.0-2+6" + fixture.AssertFullSemver("0.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.0"); + fixture.ApplyTag("0.0.0"); + } + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-3+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+3", configuration); + + fixture.ApplyTag("0.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + } + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + [TestCase(true, "release/0.1.1")] + [TestCase(true, "release/0.2.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementNoneOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.None) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("F"); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+1", configuration); + } + else + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + } + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.1+3", configuration); + + fixture.ApplyTag("0.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2+6", configuration); + } + else + { + // ❔ expected: "0.0.1-2+6" + fixture.AssertFullSemver("0.0.2-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.0.1"); + fixture.ApplyTag("0.0.1"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + [TestCase(true, "release/0.1.1")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementPatchOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Patch) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.1.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+3", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2+6", configuration); + } + else + { + // ❔ not expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("0.1.0"); + fixture.ApplyTag("0.1.0"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.1+3", configuration); + + fixture.ApplyTag("0.1.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1+6", configuration); + } + else + { + // ❔ not expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("0.1.1"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.1+3", configuration); + + fixture.ApplyTag("0.2.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.2.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("0.2.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.3.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMinorOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Minor) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+1", configuration); + } + + [TestCase(true, IncrementStrategy.Inherit)] + [TestCase(false, IncrementStrategy.None)] + [TestCase(true, IncrementStrategy.None)] + [TestCase(false, IncrementStrategy.Patch)] + [TestCase(true, IncrementStrategy.Patch)] + [TestCase(false, IncrementStrategy.Minor)] + [TestCase(true, IncrementStrategy.Minor)] + [TestCase(false, IncrementStrategy.Major)] + [TestCase(true, IncrementStrategy.Major)] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMain( + bool useMainline, IncrementStrategy incrementOnReleaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(incrementOnReleaseBranch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndInheritOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndNoneOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.None) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2+6", configuration); + } + else + { + // ❔ expected: "1.0.0-2+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) + { + fixture.Repository.Tags.Remove("1.0.0"); + fixture.ApplyTag("1.0.0"); + } + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndPatchOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.1+3", configuration); + + fixture.ApplyTag("1.0.1-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+6", configuration); + } + else + { + // ❔ expected: "1.0.1-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.0.1"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndMinorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+3", configuration); + + fixture.ApplyTag("1.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + if (useMainline) + { + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-1+6", configuration); + } + else + { + // ❔ expected: "1.1.0-1+6" + fixture.AssertFullSemver("2.0.0-1+6", configuration); + } + + if (!useMainline) fixture.ApplyTag("1.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(false, "release/0.1.0")] + [TestCase(true, "release/0.1.0")] + [TestCase(false, "release/0.1.1")] + [TestCase(true, "release/0.1.1")] + [TestCase(false, "release/0.2.0")] + [TestCase(true, "release/0.2.0")] + [TestCase(false, "release/1.0.0")] + [TestCase(true, "release/1.0.0")] + [TestCase(false, "release/1.0.1")] + [TestCase(true, "release/1.0.1")] + [TestCase(false, "release/1.0.2")] + [TestCase(true, "release/1.0.2")] + [TestCase(false, "release/1.1.0")] + [TestCase(true, "release/1.1.0")] + [TestCase(false, "release/1.1.1")] + [TestCase(true, "release/1.1.1")] + [TestCase(false, "release/2.0.0")] + [TestCase(true, "release/2.0.0")] + public void EnsureReleaseAndFeatureBranchWithIncrementMajorOnMainAndMajorOnReleaseBranch( + bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder + .WithIncrement(IncrementStrategy.Major) + .WithBranch("main", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("release", b => b + .WithIncrement(IncrementStrategy.Major) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1+6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("3.0.0-1+1", configuration); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/BranchWithoutCommitScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/BranchWithoutCommitScenarios.cs index b2fa760ada..9735e16114 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/BranchWithoutCommitScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/BranchWithoutCommitScenarios.cs @@ -1,7 +1,5 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -17,23 +15,23 @@ public void CanTakeVersionFromReleaseBranch() fixture.Repository.CreateBranch("release-4.0.123"); fixture.Checkout(commit.Sha); - fixture.AssertFullSemver("4.0.123-beta.1+0", null, fixture.Repository, commit.Sha, false, "release-4.0.123"); + fixture.AssertFullSemver("4.0.123-beta.1+1", null, fixture.Repository, commit.Sha, false, "release-4.0.123"); } - [Test] - public void BranchVersionHavePrecedenceOverTagVersionIfVersionGreaterThanTag() + [TestCase("0.1.0-alpha.1", "1.0.0-beta.1+2")] + [TestCase("1.0.0-alpha.1", "1.0.0-beta.1+2")] + [TestCase("1.0.1-alpha.1", "1.0.1-beta.1+2")] + public void BranchVersionHavePrecedenceOverTagVersionIfVersionGreaterThanTag(string tag, string expected) { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); - fixture.Repository.CreateBranch("develop"); - fixture.Checkout("develop"); - fixture.MakeATaggedCommit("0.1.0-alpha.1"); // simulate merge from feature branch + fixture.BranchTo("develop"); + fixture.MakeATaggedCommit(tag); // simulate merge from feature branch - fixture.Repository.CreateBranch("release/1.0"); - fixture.Checkout("release/1.0"); + fixture.BranchTo("release/1.0.0"); - fixture.AssertFullSemver("1.0.0-beta.1+0"); + fixture.AssertFullSemver(expected); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitFlow.cs b/src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitFlow.cs new file mode 100644 index 0000000000..ec307dd2b8 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitFlow.cs @@ -0,0 +1,1277 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitFlow +{ + private static GitFlowConfigurationBuilder configurationBuilder => GitFlowConfigurationBuilder.New; + + /// + /// GitFlow - Feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeature(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+1", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-4", configuration); + } + + /// + /// GitFlow - Merge main to feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeature(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+3", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-6", configuration); + } + + /// + /// GitFlow - Pull requests (increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequest(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureReleaseAndFeatureBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseAndFeatureBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1", configuration); + } + + /// + /// GitFlow - Release branch (Increment patch on main) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureReleaseBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + /// + /// GitFlow - Release branch (Increment patch on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + [TestCase(true, "release/0.1.0")] + public void EnsureReleaseBranch(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+4", configuration); + + fixture.ApplyTag("0.1.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-6", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureDevelopmentWithDevelopBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.ApplyTag("0.1.0-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.Checkout("develop"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.6", configuration); + + fixture.Checkout("feature/foo"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("develop", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.6", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest3.7", configuration); + + fixture.Checkout("develop"); + fixture.Repository.Branches.Remove("pull/3/merge"); + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-7", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureDevelopmentWithDevelopBranchFast(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+1", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.Checkout("develop"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.4", configuration); + + fixture.Checkout("feature/foo"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("develop", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.4", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest3.5", configuration); + + fixture.Checkout("develop"); + fixture.Repository.Branches.Remove("pull/3/merge"); + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-5", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureDevelopmentWithMainBranchFast(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+2", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.4", configuration); + + fixture.Checkout("feature/foo"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-4", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureBugFixWithMainBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("hotfix/bar"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.ApplyTag("0.0.2-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+1", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+2", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("hotfix/bar"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.4", configuration); + + fixture.Checkout("hotfix/bar"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-4", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureBugFixWithDevelopBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.BranchTo("hotfix/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+2", configuration); + + fixture.ApplyTag("0.0.2-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+2", configuration); + + fixture.Checkout("develop"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("hotfix/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.5", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("hotfix/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest3.5", configuration); + + fixture.Checkout("hotfix/foo"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-5", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureBugFixWithDevelopBranchFast(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.BranchTo("hotfix/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.ApplyTag("0.0.2-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+1", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.2+2", configuration); + + fixture.Checkout("develop"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("hotfix/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.4", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("hotfix/foo"); + + // ❔ expected: "0.0.2-PullRequest3.4" + fixture.AssertFullSemver("0.1.0-PullRequest3.4", configuration); + + fixture.Checkout("hotfix/foo"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-4", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureDevelopmentWithReleaseNextBranch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.BranchTo("release/next"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.Checkout("develop"); + fixture.MakeACommit(); + fixture.Checkout("release/next"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+4", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.Checkout("release/next"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.7", configuration); + + fixture.Checkout("feature/foo"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("release/next", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+7", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("release/next"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest3.8", configuration); + + fixture.Checkout("release/next"); + fixture.Repository.Branches.Remove("pull/3/merge"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-8", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureDevelopmentWithReleaseNextBranchFast(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.BranchTo("release/next"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.Checkout("develop"); + fixture.MakeACommit(); + fixture.Checkout("release/next"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+2", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.1+3", configuration); + + fixture.ApplyTag("0.1.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-foo.2+2", configuration); + + fixture.Checkout("release/next"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest2.6", configuration); + + fixture.Checkout("feature/foo"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("release/next", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-beta.1+6", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("release/next"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-PullRequest3.7", configuration); + + fixture.Checkout("release/next"); + fixture.Repository.Branches.Remove("pull/3/merge"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-7", configuration); + + if (!useMainline) fixture.ApplyTag("0.1.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureFeatureDevelopmentWithRelease100Branch(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("develop"); + fixture.MakeACommit(); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+3", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.1+4", configuration); + + fixture.ApplyTag("1.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-foo.2+2", configuration); + + fixture.Checkout("release/1.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest2.7", configuration); + + fixture.Checkout("feature/foo"); + fixture.Repository.Branches.Remove("pull/2/merge"); + fixture.MergeTo("release/1.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+7", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/3/merge"); + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-PullRequest3.8", configuration); + + fixture.Checkout("release/1.0.0"); + fixture.Repository.Branches.Remove("pull/3/merge"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-8", configuration); + + if (!useMainline) fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1", configuration); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitHubFlow.cs b/src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitHubFlow.cs new file mode 100644 index 0000000000..4a66feb476 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitHubFlow.cs @@ -0,0 +1,494 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +[Parallelizable(ParallelScope.All)] +public class CompareTheDifferentWhenUsingMainlineVersionStrategyWithGitHubFlow +{ + private static GitHubFlowConfigurationBuilder configurationBuilder => GitHubFlowConfigurationBuilder.New; + + /// + /// GitHubFlow - Feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureFeature1(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+0", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+1", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-4", configuration); + } + + /// + /// GitHubFlow - Merge main to feature branch (Increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureMergeMainToFeature2(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.1+3", configuration); + + fixture.ApplyTag("0.0.3-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+1", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-foo.2+2", configuration); + + fixture.MergeTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-6", configuration); + } + + /// + /// GitHubFlow - Pull requests (increment patch on main and inherit on feature) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsurePullRequest(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-2", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void EnsureReleaseAndFeatureBranch1(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.1+3", configuration); + + fixture.ApplyTag("2.0.0-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo("release/2.0.0", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseAndFeatureBranch2(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.BranchTo("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+1", configuration); + + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.1+3", configuration); + + fixture.ApplyTag("0.0.2-foo.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+0", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-foo.2+1", configuration); + + fixture.Checkout(releaseBranch); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-PullRequest2.5", configuration); + + fixture.Checkout("feature/foo"); + fixture.MergeTo(releaseBranch, removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+5", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main) + /// + [TestCase(false)] + [TestCase(true)] + public void EnsureReleaseBranch1(bool useMainline) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo("release/2.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-6", configuration); + + if (!useMainline) fixture.ApplyTag("2.0.0"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + /// + /// GitHubFlow - Release branch (Increment patch on main and none on release) + /// + [TestCase(false, "release/next")] + [TestCase(true, "release/next")] + [TestCase(false, "release/0.0.0")] + [TestCase(true, "release/0.0.0")] + [TestCase(false, "release/0.0.1")] + [TestCase(true, "release/0.0.1")] + [TestCase(false, "release/0.0.2")] + [TestCase(true, "release/0.0.2")] + public void EnsureReleaseBranch2(bool useMainline, string releaseBranch) + { + var builder = useMainline + ? configurationBuilder.WithVersionStrategy(VersionStrategies.Mainline) + : configurationBuilder; + var configuration = builder.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.1"); + fixture.BranchTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+0", configuration); + + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2-1", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.2"); + fixture.MergeTo(releaseBranch); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+2", configuration); + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+3", configuration); + + fixture.MakeACommit("E"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.1+4", configuration); + + fixture.ApplyTag("0.0.3-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+0", configuration); + + fixture.MakeACommit("F"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-beta.2+1", configuration); + + fixture.MergeTo("main", removeBranchAfterMerging: true); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3-6", configuration); + + if (!useMainline) fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("G"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.4-1", configuration); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/ComparingTheBehaviorOfDifferentVersioningModes.cs b/src/GitVersion.Core.Tests/IntegrationTests/ComparingTheBehaviorOfDifferentVersioningModes.cs new file mode 100644 index 0000000000..f1d4833705 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/ComparingTheBehaviorOfDifferentVersioningModes.cs @@ -0,0 +1,398 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +/// +/// - For mode 1 the main-releases are especially not marked with dedicated tags. +/// - For mode 2, 3 and 4 the pre-releases and the main-releases are always marked with dedicated tags. +/// - Continuous deployment with is mainline false requires always a pre-release tag unless the commit is tagged +/// +[TestFixture] +internal class ComparingTheBehaviorOfDifferentDeploymentModes +{ + private static GitHubFlowConfigurationBuilder GetConfigurationBuilder() => GitHubFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", b => b + .WithIncrement(IncrementStrategy.Patch).WithLabel(null) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Inherit).WithLabel("{BranchName}") + ); + + private static readonly IGitVersionConfiguration continuousDeployment = GetConfigurationBuilder() + .WithDeploymentMode(DeploymentMode.ContinuousDeployment) + .WithBranch("main", b => b.WithIsMainBranch(true).WithDeploymentMode(DeploymentMode.ContinuousDeployment)) + .WithBranch("feature", b => b.WithIsMainBranch(false).WithDeploymentMode(DeploymentMode.ContinuousDeployment)) + .Build(); + + private static readonly IGitVersionConfiguration continuousDelivery = GetConfigurationBuilder() + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("main", b => b.WithIsMainBranch(true).WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("feature", b => b.WithIsMainBranch(false).WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); + + private static readonly IGitVersionConfiguration manualDeployment = GetConfigurationBuilder() + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithBranch("main", b => b.WithIsMainBranch(true).WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b.WithIsMainBranch(false).WithDeploymentMode(DeploymentMode.ManualDeployment)) + .Build(); + + [Test] + public void ExpectedBehavior() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0", continuousDelivery); + fixture.AssertFullSemver("1.0.0", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-1", continuousDelivery); + fixture.AssertFullSemver("1.0.1-1+1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-2", continuousDelivery); + fixture.AssertFullSemver("1.0.1-1+2", manualDeployment); + + fixture.ApplyTag("1.0.1-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-alpha.1", continuousDelivery); + fixture.AssertFullSemver("1.0.1-alpha.1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-alpha.2", continuousDelivery); + fixture.AssertFullSemver("1.0.1-alpha.2+1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-alpha.3", continuousDelivery); + fixture.AssertFullSemver("1.0.1-alpha.2+2", manualDeployment); + + fixture.MakeATaggedCommit("1.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-beta.1", continuousDelivery); + fixture.AssertFullSemver("1.0.1-beta.1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-beta.2", continuousDelivery); + fixture.AssertFullSemver("1.0.1-beta.2+1", manualDeployment); + + fixture.MakeATaggedCommit("1.0.1-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-beta.2", continuousDelivery); + fixture.AssertFullSemver("1.0.1-beta.2", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1-beta.3", continuousDelivery); + fixture.AssertFullSemver("1.0.1-beta.3+1", manualDeployment); + + fixture.ApplyTag("1.0.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", continuousDeployment); + fixture.AssertFullSemver("1.0.1", continuousDelivery); + fixture.AssertFullSemver("1.0.1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.2", continuousDeployment); + fixture.AssertFullSemver("1.0.2-1", continuousDelivery); + fixture.AssertFullSemver("1.0.2-1+1", manualDeployment); + + fixture.ApplyTag("1.0.2-1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.2", continuousDeployment); + fixture.AssertFullSemver("1.0.2-1", continuousDelivery); + fixture.AssertFullSemver("1.0.2-1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.2", continuousDeployment); + fixture.AssertFullSemver("1.0.2-2", continuousDelivery); + fixture.AssertFullSemver("1.0.2-2+1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.2", continuousDeployment); + fixture.AssertFullSemver("1.0.2-3", continuousDelivery); + fixture.AssertFullSemver("1.0.2-2+2", manualDeployment); + } + + [Test] + public void MainRelease() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2", continuousDeployment); + fixture.AssertFullSemver("0.0.2", continuousDelivery); + fixture.AssertFullSemver("0.0.2", manualDeployment); + } + + [Test] + public void MergeFeatureToMain() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + fixture.BranchTo("feature/test"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-test.1", continuousDelivery); + fixture.AssertFullSemver("0.0.3-test.1+1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-test.2", continuousDelivery); + fixture.AssertFullSemver("0.0.3-test.1+2", manualDeployment); + + fixture.Checkout("main"); + fixture.MergeNoFF("feature/test"); + fixture.Repository.Branches.Remove("feature/test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-3", continuousDelivery); + fixture.AssertFullSemver("0.0.3-1+3", manualDeployment); + } + + [Test] + public void MergeFeatureToMainWithPreviousCommits() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-1", continuousDelivery); + fixture.AssertFullSemver("0.0.3-1+1", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-2", continuousDelivery); + fixture.AssertFullSemver("0.0.3-1+2", manualDeployment); + + fixture.BranchTo("feature/test"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-test.3", continuousDelivery); + fixture.AssertFullSemver("0.0.3-test.1+3", manualDeployment); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-test.4", continuousDelivery); + fixture.AssertFullSemver("0.0.3-test.1+4", manualDeployment); + + fixture.Checkout("main"); + fixture.MergeNoFF("feature/test"); + fixture.Repository.Branches.Remove("feature/test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", continuousDeployment); + fixture.AssertFullSemver("0.0.3-5", continuousDelivery); + fixture.AssertFullSemver("0.0.3-1+5", manualDeployment); + } + + [Test] + public void MergeFeatureToMainWithMinorMinorSemVersionIncrement() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + fixture.BranchTo("feature/test"); + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-test.1", continuousDelivery); + fixture.AssertFullSemver("0.1.0-test.1+1", manualDeployment); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-test.2", continuousDelivery); + fixture.AssertFullSemver("0.1.0-test.1+2", manualDeployment); + + fixture.Checkout("main"); + fixture.MergeNoFF("feature/test"); + fixture.Repository.Branches.Remove("feature/test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-3", continuousDelivery); + fixture.AssertFullSemver("0.1.0-1+3", manualDeployment); + } + + [Test] + public void MergeFeatureToMainWithMajorMinorSemVersionIncrement() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + fixture.BranchTo("feature/test"); + fixture.MakeACommit("+semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-test.1", continuousDelivery); + fixture.AssertFullSemver("1.0.0-test.1+1", manualDeployment); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-test.2", continuousDelivery); + fixture.AssertFullSemver("1.0.0-test.1+2", manualDeployment); + + fixture.Checkout("main"); + fixture.MergeNoFF("feature/test"); + fixture.Repository.Branches.Remove("feature/test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-3", continuousDelivery); + fixture.AssertFullSemver("1.0.0-1+3", manualDeployment); + } + + [Test] + public void MergeFeatureToMainWithPreviousCommitsAndMinorMinorSemVersionIncrement() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-1", continuousDelivery); + fixture.AssertFullSemver("0.1.0-1+1", manualDeployment); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-2", continuousDelivery); + fixture.AssertFullSemver("0.1.0-1+2", manualDeployment); + + fixture.BranchTo("feature/test"); + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-test.3", continuousDelivery); + fixture.AssertFullSemver("0.1.0-test.1+3", manualDeployment); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-test.4", continuousDelivery); + fixture.AssertFullSemver("0.1.0-test.1+4", manualDeployment); + + fixture.Checkout("main"); + fixture.MergeNoFF("feature/test"); + fixture.Repository.Branches.Remove("feature/test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-5", continuousDelivery); + fixture.AssertFullSemver("0.1.0-1+5", manualDeployment); + } + + [Test] + public void MergeFeatureToMainWithPreviousCommitsAndMinorMajorSemVersionIncrement() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("0.0.2"); + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0", continuousDeployment); + fixture.AssertFullSemver("0.1.0-1", continuousDelivery); + fixture.AssertFullSemver("0.1.0-1+1", manualDeployment); + + fixture.MakeACommit("+semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-2", continuousDelivery); + fixture.AssertFullSemver("1.0.0-1+2", manualDeployment); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-3", continuousDelivery); + fixture.AssertFullSemver("1.0.0-1+3", manualDeployment); + + fixture.BranchTo("feature/test"); + fixture.MakeACommit("+semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-test.4", continuousDelivery); + fixture.AssertFullSemver("1.0.0-test.1+4", manualDeployment); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-test.5", continuousDelivery); + fixture.AssertFullSemver("1.0.0-test.1+5", manualDeployment); + + fixture.Checkout("main"); + fixture.MergeNoFF("feature/test"); + fixture.Repository.Branches.Remove("feature/test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", continuousDeployment); + fixture.AssertFullSemver("1.0.0-6", continuousDelivery); + fixture.AssertFullSemver("1.0.0-1+6", manualDeployment); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/ContinuousDeliveryTestScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/ContinuousDeliveryTestScenarios.cs new file mode 100644 index 0000000000..fc3168c637 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/ContinuousDeliveryTestScenarios.cs @@ -0,0 +1,453 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +public class ContinuousDeliveryTestScenarios +{ + [Test] + public void ShouldUseTheFallbackVersionOnMainWhenNoVersionsAreAvailable() + { + // * 2373a87 58 minutes ago (HEAD -> main) + + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("main", builder => builder + .WithLabel("ci") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + ) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.1", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldUseTheFallbackVersionOnDevelopWhenNoVersionsAreAvailable() + { + // * a831d61 58 minutes ago (HEAD -> develop) + + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .Build(); + + using var fixture = new EmptyRepositoryFixture("develop"); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldUseConfiguredNextVersionOnMainWhenNoHigherVersionsAvailable() + { + // * 8c64db3 58 minutes ago (HEAD -> main) + + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.0.0") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("main", builder => builder + .WithLabel("ci") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + ) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-ci.1", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldNotMatterWhenConfiguredNextVersionIsEqualsToTheTaggedVersion() + { + // * 858f71b 58 minutes ago (HEAD -> main, tag: 1.0.0) + + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.0.0") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldUseTaggedVersionWhenGreaterThanConfiguredNextVersion() + { + // * ba74727 58 minutes ago (HEAD -> main, tag: 1.1.0) + + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithNextVersion("1.0.0").Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.1.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldCalculateTheCorrectVersionWhenMergingFromMainToFeatureBranch() + { + // *94f03f8 55 minutes ago(HEAD -> main) + // |\ + // | *b1f41a4 56 minutes ago + // |/ + // *ec77f9c 58 minutes ago + + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("main", builder => builder + .WithLabel("ci") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + ) + .WithBranch("feature", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.1", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-just-a-test.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-just-a-test.2", configuration); + + fixture.Checkout("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.1", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.3", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.3", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldCalculateTheCorrectVersionWhenMergingFromDevelopToFeatureBranch() + { + // *2c475bf 55 minutes ago(HEAD -> develop) + // |\ + // | *e05365d 56 minutes ago + // |/ + // *67acc03 58 minutes ago(main) + + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("develop", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("feature", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-just-a-test.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-just-a-test.2", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.3", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.3", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldCalculateTheCorrectVersionWhenMergingFromReleaseToFeatureBranch() + { + // *b1e5593 53 minutes ago(HEAD -> release/ 1.0.0) + // *8752695 55 minutes ago + // |\ + // | *0965b88 56 minutes ago + // |/ + // *f63a536 58 minutes ago(main) + + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("main", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("release", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("feature", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.2", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.3", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.3", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldFallbackToTheVersionOnDevelopLikeTheReleaseWasNeverCreatedWhenReleaseHasBeenCanceled() + { + // *8f062c7 49 minutes ago(HEAD -> develop) + // |\ + // | *bda6ba8 52 minutes ago + // | *6f5cf19 54 minutes ago + // * | 3b20f15 50 minutes ago + // |/ + // *f5640b3 56 minutes ago + // *2099a07 58 minutes ago(main) + + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder + .WithLabel("ci") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithTrackMergeTarget(false) + ) + .WithBranch("develop", builder => builder + .WithTrackMergeTarget(false) + ) + .WithBranch("release", builder => builder + .WithTrackMergeTarget(false) + ) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.1", configuration); + + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.4", configuration); + + // cancel the release 1.0.0 + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.6", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldConsiderTheMergeCommitFromMainToDevelopWhenReleaseHasBeenMergedAndTaggedOnMain() + { + // * 5d13120 48 minutes ago (HEAD -> develop) + // |\ + // | * 8ddd9b0 49 minutes ago (tag: 1.0.0, main) + // | |\ + // | | * 4b826b8 52 minutes ago + // | | * d4b0047 54 minutes ago + // * | | 0457671 50 minutes ago + // | |/ + // |/| + // * | 5f31f30 56 minutes ago + // |/ + // * 252971e 58 minutes ago + + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder + .WithLabel("ci") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithTrackMergeTarget(false) + ) + .WithBranch("develop", builder => builder + .WithTrackMergeTarget(false) + ) + .WithBranch("release", builder => builder + .WithTrackMergeTarget(false) + ) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-ci.1", configuration); + + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-ci.5", configuration); + + fixture.ApplyTag("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.MergeNoFF("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); + + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); + + fixture.Repository.DumpGraph(); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/CreatingAFeatureBranchFromAReleaseBranchScenario.cs b/src/GitVersion.Core.Tests/IntegrationTests/CreatingAFeatureBranchFromAReleaseBranchScenario.cs new file mode 100644 index 0000000000..6d8a75983a --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/CreatingAFeatureBranchFromAReleaseBranchScenario.cs @@ -0,0 +1,908 @@ +using GitVersion.Configuration; + +namespace GitVersion.Core.Tests.IntegrationTests; + +/// +/// Version not generated correct when creating a feature branch from a release branch #3101 +/// +[TestFixture] +public class CreatingAFeatureBranchFromAReleaseBranchScenario +{ + [Test] + public void ShouldTreatTheFeatureBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromMainAndFirstReleaseBranchButNotFromTheSecondReleaseBranch() + { + // *f59b84f in the future(HEAD -> release/ 1.0.0) + // *d0f4669 in the future + // |\ + // | *471acec in the future + // |/ + // | *266fa68 in the future(release/ 1.1.0, main) + // |/ + // *e0b5034 6 seconds ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2", configuration); + + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+2", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheFeatureBranchNotLikeTheReleaseBranchWhenItHasBeenBranchedFromDevelopAndFirstReleaseBranchButNotFromTheSecondReleaseBranch() + { + // *19ed1e8 in the future(HEAD -> release/ 1.0.0) + // *1684169 in the future + // |\ + // | *07bd75c in the future + // |/ + // | *ff34213 in the future(release/ 1.1.0, develop) + // |/ + // *d5ac9aa in the future + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture("develop"); + + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + // 1.1.0 is correct because the base branch points to develop and release + // maybe we can fix it somehow using the configuration with PreReleaseWeight? + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-just-a-test.1+0", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+2", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheHotfixBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromMainAndFirstReleaseBranchButNotFromTheSecondReleaseBranch() + { + // *2b9c8bf 42 minutes ago(HEAD -> release/ 1.0.0) + // *66cfc66 44 minutes ago + // |\ + // | *e9978b9 45 minutes ago + // |/ + // | *c2b96e5 47 minutes ago(release/ 1.1.0, main|develop) + // |/ + // *e00f53d 49 minutes ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.BranchTo("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.Checkout("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.MergeNoFF("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.Repository.Branches.Remove("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheHotfixBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromDevelopAndFirstReleaseBranchButNotFromTheSecondReleaseBranch() + { + // *2b9c8bf 42 minutes ago(HEAD -> release/ 1.0.0) + // *66cfc66 44 minutes ago + // |\ + // | *e9978b9 45 minutes ago + // |/ + // | *c2b96e5 47 minutes ago(release/ 1.1.0, main|develop) + // |/ + // *e00f53d 49 minutes ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.BranchTo("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.Checkout("develop"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.Checkout("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+3", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MergeNoFF("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.Branches.Remove("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheFeatureBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromFirstButNotFromTheSecondReleaseBranchFromMain() + { + // * 3807c66 49 minutes ago (HEAD -> release/1.0.0) + // * da32145 51 minutes ago + // |\ + // | * 6a89f35 52 minutes ago + // |/ + // * 19f2980 56 minutes ago + // | * 2282a59 54 minutes ago (release/1.1.0, main) + // |/ + // * d7b7c5e 58 minutes ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.Repository.MakeACommit(); + + fixture.BranchTo("release/1.0.0"); + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+2", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.Checkout("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+3", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheFeatureBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromFirstButNotFromTheSecondReleaseBranchFromDevelop() + { + // *1525ad0 38 minutes ago(HEAD -> release/ 1.0.0) + // *476fc51 40 minutes ago + // |\ + // | *c8c5030 41 minutes ago + // |/ + // *d91061d 45 minutes ago + // | *1ac98f5 43 minutes ago(release/ 1.1.0, develop) + // |/ + // *22596b8 47 minutes ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.Repository.MakeACommit(); + + fixture.BranchTo("develop"); + fixture.Repository.MakeACommit(); + + fixture.BranchTo("release/1.0.0"); + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+3", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.Checkout("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+4", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+6", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheHotfixBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromFirstButNotFromTheSecondReleaseBranchOnMain() + { + // *1525ad0 38 minutes ago(HEAD -> release/ 1.0.0) + // *476fc51 40 minutes ago + // |\ + // | *c8c5030 41 minutes ago + // |/ + // *d91061d 45 minutes ago + // | *1ac98f5 43 minutes ago(release/ 1.1.0, develop) + // |/ + // *22596b8 47 minutes ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.Repository.MakeACommit(); + + fixture.BranchTo("release/1.0.0"); + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.BranchTo("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.Checkout("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+3", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MergeNoFF("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.Branches.Remove("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheHotfixBranchLikeTheFirstReleaseBranchWhenItHasBeenBranchedFromFirstButNotFromTheSecondReleaseBranchOnDevelop() + { + // *1525ad0 38 minutes ago(HEAD -> release/ 1.0.0) + // *476fc51 40 minutes ago + // |\ + // | *c8c5030 41 minutes ago + // |/ + // *d91061d 45 minutes ago + // | *1ac98f5 43 minutes ago(release/ 1.1.0, develop) + // |/ + // *22596b8 47 minutes ago + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.Repository.MakeACommit(); + + fixture.BranchTo("develop"); + fixture.Repository.MakeACommit(); + + fixture.BranchTo("release/1.0.0"); + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.BranchTo("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+3", configuration); + + fixture.Checkout("develop"); + fixture.MakeACommit(); + fixture.BranchTo("release/1.1.0"); + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.Checkout("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+4", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MergeNoFF("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.Repository.Branches.Remove("hotfix/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+6", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheFeatureBranchLikeTheReleaseBranchWhenItHasBeenBranchedFromRelease() + { + // *588f0de in the future(HEAD -> release/ 1.0.0) + // *56f660c in the future + // |\ + // | *9450fb0 in the future + // |/ + // *9e557cd in the future + // *2e022d7 in the future(main) + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.Repository.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.BranchTo("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-just-a-test.1+3", configuration); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MergeNoFF("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Repository.Branches.Remove("feature/just-a-test"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+5", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldTreatTheMergeFromReleaseToDevelopLikeTheReleaseBranchHasNeverBeenExistingWhenReleaseHasBeenCanceled() + { + // *809eaa7 in the future(HEAD -> develop) + // *46e2cb8 in the future + // |\ + // | *08bd8ff in the future + // | *9b741de in the future + // * | 13206fd in the future + // |/ + // *9dc9b22 in the future + // *f708abd in the future(main) + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.4", configuration); + + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.6", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.7", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldOnlyTrackTheCommitsOnDevelopBranchForNextReleaseWhenReleaseHasBeenShippedToProduction() + { + // *9afb0ca in the future(HEAD -> develop) + // |\ + // | *90c96f2 in the future(tag: 1.0.0, main) + // | |\ + // | | *7de3d63 in the future + // | | *2ccf33b in the future + // * | | e050757 in the future + // | |/ + // |/| + // * | cf1ff87 in the future + // |/ + // *838a95b in the future + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-5", configuration); + + fixture.ApplyTag("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.MergeNoFF("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); + + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void ShouldNotConsiderTheMergeCommitFromReleaseToMainWhenCommitHasNotBeenTagged() + { + // *457e0cd in the future(HEAD -> develop) + // |\ + // | *d9da657 in the future(tag: 1.0.0, main) + // | |\ + // | | *026a6cd in the future + // | | *7f5de6e in the future + // * | | 3db6e6f in the future + // | |/ + // |/| + // * | 845926e in the future + // |/ + // *42db9ba in the future + + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.BranchTo("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configuration); + + fixture.BranchTo("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+4", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-5", configuration); + + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-5", configuration); + + fixture.ApplyTag("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); + + fixture.MergeNoFF("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); + + fixture.Repository.DumpGraph(); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs index bd9f36b2a4..6d06396eb4 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/DevelopScenarios.cs @@ -1,9 +1,7 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -46,33 +44,25 @@ public void WhenDevelopHasMultipleCommitsSpecifyNonExistingCommitId() public void WhenDevelopBranchedFromTaggedCommitOnMainVersionDoesNotChange() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - fixture.AssertFullSemver("1.0.0"); + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("develop"); + fixture.AssertFullSemver("1.1.0-alpha.0"); } [Test] public void CanChangeDevelopTagViaConfig() { - var config = new Config - { - Branches = - { - { - "develop", - new BranchConfig - { - Tag = "alpha", - SourceBranches = new HashSet() - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", builder => builder + .WithLabel("alpha").WithSourceBranches() + ) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.0"); Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("1.1.0-alpha.1", config); + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); } [Test] @@ -108,22 +98,22 @@ public void MergingReleaseBranchBackIntoDevelopWithMergingToMainDoesBumpDevelopV fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); Commands.Checkout(fixture.Repository, "develop"); - fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); + fixture.MergeNoFF("release-2.0.0"); fixture.AssertFullSemver("2.1.0-alpha.2"); } [Test] public void CanHandleContinuousDelivery() { - var config = new Config - { - Branches = { { "develop", new BranchConfig { VersioningMode = VersioningMode.ContinuousDelivery } } } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - fixture.Repository.MakeATaggedCommit("1.1.0-alpha7"); - fixture.AssertFullSemver("1.1.0-alpha.7", config); + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("develop"); + fixture.MakeATaggedCommit("1.1.0-alpha7"); + fixture.AssertFullSemver("1.1.0-alpha.7", configuration); } [Test] @@ -140,7 +130,7 @@ public void WhenDevelopBranchedFromMainDetachedHeadMinorIsIncreased() } [Test] - public void InheritVersionFromReleaseBranch() + public void InheritVersionFromParentReleaseBranch() { using var fixture = new EmptyRepositoryFixture(); fixture.MakeATaggedCommit("1.0.0"); @@ -150,7 +140,7 @@ public void InheritVersionFromReleaseBranch() fixture.MakeACommit(); fixture.MakeACommit(); fixture.Checkout("develop"); - fixture.AssertFullSemver("1.1.0-alpha.1"); + fixture.AssertFullSemver("2.1.0-alpha.0"); fixture.MakeACommit(); fixture.AssertFullSemver("2.1.0-alpha.1"); fixture.MergeNoFF("release/2.0.0"); @@ -160,6 +150,30 @@ public void InheritVersionFromReleaseBranch() fixture.AssertFullSemver("2.1.0-MyFeature.1+5"); } + [Test] + public void InheritVersionFromParentReleaseBranchWithVersion2InsteadOfVersion3() + { + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("develop"); + fixture.Repository.CreateBranch("release/3.0.0"); + fixture.MakeACommit(); + fixture.BranchTo("release/2.0.0"); + fixture.MakeACommit(); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-beta.1+3"); + fixture.Checkout("develop"); + fixture.AssertFullSemver("3.1.0-alpha.1"); + fixture.MakeACommit(); + fixture.AssertFullSemver("3.1.0-alpha.2"); + fixture.MergeNoFF("release/2.0.0"); + fixture.AssertFullSemver("3.1.0-alpha.5"); + fixture.Checkout("release/2.0.0"); + fixture.BranchTo("feature/MyFeature"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-MyFeature.1+4"); + } + [Test] public void WhenMultipleDevelopBranchesExistAndCurrentBranchHasIncrementInheritPolicyAndCurrentCommitIsAMerge() { @@ -189,7 +203,7 @@ public void TagOnHotfixShouldNotAffectDevelop() fixture.Repository.MakeACommit(); fixture.AssertFullSemver("1.2.1-beta.1+1"); fixture.Repository.ApplyTag("1.2.1-beta.1"); - fixture.AssertFullSemver("1.2.1-beta.1"); + fixture.AssertFullSemver("1.2.1-beta.2+0"); Commands.Checkout(fixture.Repository, "develop"); fixture.Repository.MakeACommit(); fixture.AssertFullSemver("1.3.0-alpha.2"); @@ -198,10 +212,11 @@ public void TagOnHotfixShouldNotAffectDevelop() [Test] public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("develop", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("release", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -210,7 +225,7 @@ public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish() fixture.MakeACommit("commit in develop - 1"); fixture.AssertFullSemver("1.2.0-alpha.1"); fixture.BranchTo("release/1.2.0"); - fixture.AssertFullSemver("1.2.0-beta.1+0"); + fixture.AssertFullSemver("1.2.0-beta.1+1"); fixture.Checkout("develop"); fixture.MakeACommit("commit in develop - 2"); fixture.MakeACommit("commit in develop - 3"); @@ -221,28 +236,29 @@ public void CommitsSinceVersionSourceShouldNotGoDownUponGitFlowReleaseFinish() fixture.MakeACommit("commit in release/1.2.0 - 1"); fixture.MakeACommit("commit in release/1.2.0 - 2"); fixture.MakeACommit("commit in release/1.2.0 - 3"); - fixture.AssertFullSemver("1.2.0-beta.1+3"); + fixture.AssertFullSemver("1.2.0-beta.1+4"); fixture.Checkout(MainBranch); fixture.MergeNoFF("release/1.2.0"); fixture.ApplyTag("1.2.0"); fixture.Checkout("develop"); fixture.MergeNoFF("release/1.2.0"); fixture.MakeACommit("commit in develop - 6"); - fixture.AssertFullSemver("1.3.0-alpha.9"); + fixture.AssertFullSemver("1.3.0-alpha.6"); fixture.SequenceDiagram.Destroy("release/1.2.0"); fixture.Repository.Branches.Remove("release/1.2.0"); - const string expectedFullSemVer = "1.3.0-alpha.9"; - fixture.AssertFullSemver(expectedFullSemVer, config); + const string expectedFullSemVer = "1.3.0-alpha.6"; + fixture.AssertFullSemver(expectedFullSemVer, configuration); } [Test] public void CommitsSinceVersionSourceShouldNotGoDownUponMergingFeatureOnlyToDevelop() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("develop", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("release", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit($"commit in {MainBranch} - 1"); @@ -254,18 +270,18 @@ public void CommitsSinceVersionSourceShouldNotGoDownUponMergingFeatureOnlyToDeve fixture.MakeACommit("commit in release - 1"); fixture.MakeACommit("commit in release - 2"); fixture.MakeACommit("commit in release - 3"); - fixture.AssertFullSemver("1.2.0-beta.1+3"); + fixture.AssertFullSemver("1.2.0-beta.1+4"); fixture.ApplyTag("1.2.0"); fixture.Checkout("develop"); fixture.MakeACommit("commit in develop - 2"); fixture.AssertFullSemver("1.3.0-alpha.1"); fixture.MergeNoFF("release/1.2.0"); - fixture.AssertFullSemver("1.3.0-alpha.5"); + fixture.AssertFullSemver("1.3.0-alpha.2"); fixture.SequenceDiagram.Destroy("release/1.2.0"); fixture.Repository.Branches.Remove("release/1.2.0"); - const string expectedFullSemVer = "1.3.0-alpha.5"; - fixture.AssertFullSemver(expectedFullSemVer, config); + const string expectedFullSemVer = "1.3.0-alpha.2"; + fixture.AssertFullSemver(expectedFullSemVer, configuration); } [Test] @@ -287,14 +303,14 @@ public void PreviousPreReleaseTagShouldBeRespectedWhenCountingCommits() [Test] public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommitsSinceVersionSourceShouldNotGoDownWhenMergingReleaseToDevelop() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment, - Branches = new Dictionary - { - { "develop", new BranchConfig { PreventIncrementOfMergedBranchVersion = false } } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("develop", builder => builder + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithPreventIncrementOfMergedBranch(false) + ) + .WithBranch("release", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); using var fixture = new EmptyRepositoryFixture(); const string ReleaseBranch = "release/1.1.0"; @@ -317,37 +333,71 @@ public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommi fixture.MergeNoFF(ReleaseBranch); // Version numbers will still be correct when the release branch is around. - fixture.AssertFullSemver("1.2.0-alpha.6"); - fixture.AssertFullSemver("1.2.0-alpha.6", config); + fixture.AssertFullSemver("1.2.0-alpha.3"); + fixture.AssertFullSemver("1.2.0-alpha.3", configuration); - var versionSourceBeforeReleaseBranchIsRemoved = fixture.GetVersion(config).Sha; + var versionSourceBeforeReleaseBranchIsRemoved = fixture.GetVersion(configuration).Sha; fixture.Repository.Branches.Remove(ReleaseBranch); - var versionSourceAfterReleaseBranchIsRemoved = fixture.GetVersion(config).Sha; - Assert.AreEqual(versionSourceBeforeReleaseBranchIsRemoved, versionSourceAfterReleaseBranchIsRemoved); - fixture.AssertFullSemver("1.2.0-alpha.6"); - fixture.AssertFullSemver("1.2.0-alpha.6", config); - - config.Branches = new Dictionary - { - { "develop", new BranchConfig { PreventIncrementOfMergedBranchVersion = true } } - }; - fixture.AssertFullSemver("1.2.0-alpha.3", config); + var versionSourceAfterReleaseBranchIsRemoved = fixture.GetVersion(configuration).Sha; + Assert.That(versionSourceAfterReleaseBranchIsRemoved, Is.EqualTo(versionSourceBeforeReleaseBranchIsRemoved)); + fixture.AssertFullSemver("1.2.0-alpha.3"); + fixture.AssertFullSemver("1.2.0-alpha.3", configuration); } [Test] - public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommitsSinceVersionSourceShouldNotGoDownWhenMergingHotfixToDevelop() + public void WhenPreventIncrementOfMergedBranchVersionIsSetToTrueForDevelopCommitsSinceVersionSourceShouldNotGoDownWhenMergingReleaseToDevelop() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment, - Branches = new Dictionary - { - { "develop", new BranchConfig { PreventIncrementOfMergedBranchVersion = false } }, - { "hotfix", new BranchConfig { PreventIncrementOfMergedBranchVersion = true, Regex = "^(origin/)?hotfix[/-]" } } + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("develop", builder => builder.WithPreventIncrementOfMergedBranch(true)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + const string ReleaseBranch = "release/1.1.0"; + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.MakeATaggedCommit("1.0.0"); + fixture.Repository.MakeCommits(1); + + // Create a release branch and make some commits + fixture.BranchTo(ReleaseBranch); + fixture.Repository.MakeCommits(3); + + // Simulate a GitFlow release finish. + fixture.Checkout(MainBranch); + fixture.MergeNoFF(ReleaseBranch); + fixture.ApplyTag("v1.1.0"); + fixture.Checkout("develop"); + // Simulate some work done on develop while the release branch was open. + fixture.Repository.MakeCommits(2); + fixture.MergeNoFF(ReleaseBranch); + + // Version numbers will still be correct when the release branch is around. + fixture.AssertFullSemver("1.2.0-alpha.3"); + fixture.AssertFullSemver("1.2.0-alpha.3", configuration); + + var versionSourceBeforeReleaseBranchIsRemoved = fixture.GetVersion(configuration).Sha; + + fixture.Repository.Branches.Remove(ReleaseBranch); + var versionSourceAfterReleaseBranchIsRemoved = fixture.GetVersion(configuration).Sha; + Assert.That(versionSourceAfterReleaseBranchIsRemoved, Is.EqualTo(versionSourceBeforeReleaseBranchIsRemoved)); + fixture.AssertFullSemver("1.2.0-alpha.3"); + fixture.AssertFullSemver("1.2.0-alpha.3", configuration); + } - } - }; + [Test] + public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommitsSinceVersionSourceShouldNotGoDownWhenMergingHotfixToDevelop() + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", builder => builder + .WithPreventIncrementOfMergedBranch(false) + ) + .WithBranch("hotfix", builder => builder + .WithPreventIncrementOfMergedBranch(true) + .WithRegularExpression("^(origin/)?hotfix[/-]") + ) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -357,12 +407,12 @@ public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommi fixture.Checkout("develop"); fixture.Repository.MakeCommits(3); - fixture.AssertFullSemver("1.1.0-alpha.4", config); + fixture.AssertFullSemver("1.1.0-alpha.4", configuration); const string ReleaseBranch = "release/1.1.0"; Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch(ReleaseBranch)); fixture.Repository.MakeCommits(3); - fixture.AssertFullSemver("1.1.0-beta.3", config); + fixture.AssertFullSemver("1.1.0-beta.1+7", configuration); // Simulate a GitFlow release finish. fixture.Checkout(MainBranch); @@ -374,7 +424,7 @@ public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommi fixture.Repository.MakeCommits(2); fixture.MergeNoFF(ReleaseBranch); fixture.Repository.Branches.Remove(ReleaseBranch); - fixture.AssertFullSemver("1.2.0-alpha.6", config); + fixture.AssertFullSemver("1.2.0-alpha.3", configuration); // Create hotfix for defects found in release/1.1.0 const string HotfixBranch = "hotfix/1.1.1"; @@ -391,11 +441,116 @@ public void WhenPreventIncrementOfMergedBranchVersionIsSetToFalseForDevelopCommi fixture.Checkout("develop"); // Simulate some work done on develop while the hotfix branch was open. fixture.Repository.MakeCommits(3); - fixture.AssertFullSemver("1.2.0-alpha.9", config); + fixture.AssertFullSemver("1.2.0-alpha.6", configuration); fixture.Repository.MergeNoFF(HotfixBranch); - fixture.AssertFullSemver("1.2.0-alpha.19", config); + fixture.AssertFullSemver("1.2.0-alpha.7", configuration); fixture.Repository.Branches.Remove(HotfixBranch); - fixture.AssertFullSemver("1.2.0-alpha.19", config); + fixture.AssertFullSemver("1.2.0-alpha.7", configuration); + } + + [Test] + public void NextVersionShouldBeConsideredOnTheMainBranch() + { + using var fixture = new EmptyRepositoryFixture(); + + var configurationBuilder = GitFlowConfigurationBuilder.New; + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configurationBuilder.Build()); + + configurationBuilder.WithNextVersion("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1", configurationBuilder.Build()); + + fixture.MakeACommit(); + configurationBuilder.WithNextVersion(null); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2", configurationBuilder.Build()); + + configurationBuilder.WithNextVersion("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-2", configurationBuilder.Build()); + } + + /// + /// Prevent decrementation of versions on the develop branch #3177 + /// (see https://github.com/GitTools/GitVersion/discussions/3177) + /// + [Test] + public void PreventDecrementationOfVersionsOnTheMainBranch() + { + using var fixture = new EmptyRepositoryFixture("develop"); + + var configurationBuilder = GitFlowConfigurationBuilder.New; + + fixture.MakeACommit(); + configurationBuilder.WithNextVersion("1.0.0"); + + // now we are ready to start with the preparation of the 1.0.0 release + fixture.BranchTo("release/1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configurationBuilder.Build()); + + // now we make changes on develop that may or may not end up in the 1.0.0 release + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configurationBuilder.Build()); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configurationBuilder.Build()); + + // now we do the actual release of beta 1 + fixture.Checkout("release/1.0.0"); + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configurationBuilder.Build()); + + // continue with more work on develop that may or may not end up in the 1.0.0 release + fixture.Checkout("develop"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configurationBuilder.Build()); + + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.4", configurationBuilder.Build()); + + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.5", configurationBuilder.Build()); + + fixture.Repository.Tags.Remove("1.0.0-beta.1"); + + // Merge from develop to main + fixture.BranchTo("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-5", configurationBuilder.Build()); + + configurationBuilder.WithNextVersion("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-5", configurationBuilder.Build()); + + // Mark this version as RTM + fixture.ApplyTag("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configurationBuilder.Build()); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamples.cs b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamples.cs index 5b1d12634a..71160f3a31 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamples.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamples.cs @@ -1,7 +1,4 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; @@ -60,9 +57,9 @@ public void GitFlowPullRequestBranch() // Open Pull Request fixture.BranchTo("pull/2/merge", "pr"); fixture.SequenceDiagram.Activate("pull/2/merge"); - fixture.AssertFullSemver("1.3.0-PullRequest0002.1"); + fixture.AssertFullSemver("1.3.0-PullRequest2.1"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.3.0-PullRequest0002.2"); + fixture.AssertFullSemver("1.3.0-PullRequest2.2"); // Merge into develop fixture.Checkout("develop"); @@ -94,7 +91,7 @@ public void GitFlowHotfixBranch() // Apply beta.1 tag should be exact tag fixture.ApplyTag("1.2.1-beta.1"); - fixture.AssertFullSemver("1.2.1-beta.1"); + fixture.AssertFullSemver("1.2.1-beta.2+0"); fixture.Checkout(MainBranch); fixture.MergeNoFF("hotfix/1.2.1"); fixture.SequenceDiagram.Destroy("hotfix/1.2.1"); @@ -121,7 +118,7 @@ public void GitFlowMinorRelease() // Create release branch fixture.BranchTo("release/1.3.0", "release"); fixture.SequenceDiagram.Activate("release/1.3.0"); - fixture.AssertFullSemver("1.3.0-beta.1+0"); + fixture.AssertFullSemver("1.3.0-beta.1+1"); // Make another commit on develop fixture.Checkout("develop"); @@ -131,15 +128,15 @@ public void GitFlowMinorRelease() // Make a commit to release-1.3.0 fixture.Checkout("release/1.3.0"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.3.0-beta.1+1"); + fixture.AssertFullSemver("1.3.0-beta.1+2"); // Apply beta.1 tag should be exact tag fixture.ApplyTag("1.3.0-beta.1"); - fixture.AssertFullSemver("1.3.0-beta.1"); + fixture.AssertFullSemver("1.3.0-beta.2+0"); // Make a commit after a tag should bump up the beta fixture.MakeACommit(); - fixture.AssertFullSemver("1.3.0-beta.2+2"); + fixture.AssertFullSemver("1.3.0-beta.2+1"); // Complete release fixture.Checkout(MainBranch); @@ -155,7 +152,7 @@ public void GitFlowMinorRelease() // Not 0 for commit count as we can't know the increment rules of the merged branch fixture.Checkout("develop"); - fixture.AssertFullSemver("1.4.0-alpha.4"); + fixture.AssertFullSemver("1.4.0-alpha.2"); Console.WriteLine(fixture.SequenceDiagram.GetDiagram()); } @@ -176,7 +173,7 @@ public void GitFlowMajorRelease() // Create release branch fixture.BranchTo("release/2.0.0", "release"); fixture.SequenceDiagram.Activate("release/2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.1+0"); + fixture.AssertFullSemver("2.0.0-beta.1+1"); // Make another commit on develop fixture.Checkout("develop"); @@ -186,15 +183,15 @@ public void GitFlowMajorRelease() // Make a commit to release-2.0.0 fixture.Checkout("release/2.0.0"); fixture.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.1+1"); + fixture.AssertFullSemver("2.0.0-beta.1+2"); // Apply beta.1 tag should be exact tag fixture.ApplyTag("2.0.0-beta.1"); - fixture.AssertFullSemver("2.0.0-beta.1"); + fixture.AssertFullSemver("2.0.0-beta.2+0"); // Make a commit after a tag should bump up the beta fixture.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.2+2"); + fixture.AssertFullSemver("2.0.0-beta.2+1"); // Complete release fixture.Checkout(MainBranch); @@ -205,13 +202,13 @@ public void GitFlowMajorRelease() fixture.SequenceDiagram.NoteOver("Release branches are deleted once merged", "release/2.0.0"); fixture.Checkout(MainBranch); - fixture.AssertFullSemver("2.0.0+0"); + fixture.AssertFullSemver("2.0.0-4"); fixture.ApplyTag("2.0.0"); fixture.AssertFullSemver("2.0.0"); // Not 0 for commit count as we can't know the increment rules of the merged branch fixture.Checkout("develop"); - fixture.AssertFullSemver("2.1.0-alpha.4"); + fixture.AssertFullSemver("2.1.0-alpha.2"); Console.WriteLine(fixture.SequenceDiagram.GetDiagram()); } @@ -236,7 +233,7 @@ public void GitFlowSupportHotfixRelease() fixture.Checkout("1.3.0"); fixture.BranchToFromTag("support/1.x", "1.3.0", MainBranch, "support"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.3.1+1"); + fixture.AssertFullSemver("1.3.1-1"); fixture.BranchTo("hotfix/1.3.1", "hotfix2"); fixture.SequenceDiagram.Activate("hotfix/1.3.1"); @@ -246,12 +243,12 @@ public void GitFlowSupportHotfixRelease() // Apply beta.1 tag should be exact tag fixture.ApplyTag("1.3.1-beta.1"); - fixture.AssertFullSemver("1.3.1-beta.1"); + fixture.AssertFullSemver("1.3.1-beta.2+0"); fixture.Checkout("support/1.x"); fixture.MergeNoFF("hotfix/1.3.1"); fixture.SequenceDiagram.Destroy("hotfix/1.3.1"); fixture.SequenceDiagram.NoteOver("Hotfix branches are deleted once merged", "hotfix/1.3.1"); - fixture.AssertFullSemver("1.3.1+4"); + fixture.AssertFullSemver("1.3.1-4"); fixture.ApplyTag("1.3.1"); fixture.AssertFullSemver("1.3.1"); Console.WriteLine(fixture.SequenceDiagram.GetDiagram()); @@ -289,18 +286,17 @@ public void GitFlowSupportMinorRelease() // Apply beta.1 tag should be exact tag fixture.ApplyTag("1.4.0-beta.1"); - fixture.AssertFullSemver("1.4.0-beta.1"); + fixture.AssertFullSemver("1.4.0-beta.2+0"); fixture.Checkout("support/1.x"); fixture.MergeNoFF("release/1.4.0"); fixture.SequenceDiagram.Destroy("release/1.4.0"); fixture.SequenceDiagram.NoteOver("Release branches are deleted once merged", "release/1.4.0"); - fixture.AssertFullSemver("1.4.0+0"); + fixture.AssertFullSemver("1.4.0-3"); fixture.ApplyTag("1.4.0"); fixture.AssertFullSemver("1.4.0"); Console.WriteLine(fixture.SequenceDiagram.GetDiagram()); } - [Test] public void GitHubFlowFeatureBranch() { @@ -313,7 +309,7 @@ public void GitHubFlowFeatureBranch() // Branch to develop fixture.MakeACommit(); - fixture.AssertFullSemver("1.2.1+1"); + fixture.AssertFullSemver("1.2.1-1"); // Open Pull Request const string branchName = "feature/myFeature"; @@ -328,7 +324,7 @@ public void GitHubFlowFeatureBranch() fixture.MergeNoFF(branchName); fixture.SequenceDiagram.Destroy(branchName); fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); - fixture.AssertFullSemver("1.2.1+3"); + fixture.AssertFullSemver("1.2.1-3"); } [Test] @@ -343,14 +339,14 @@ public void GitHubFlowPullRequestBranch() // Branch to develop fixture.MakeACommit(); - fixture.AssertFullSemver("1.2.1+1"); + fixture.AssertFullSemver("1.2.1-1"); // Open Pull Request fixture.BranchTo("pull/2/merge", "pr"); fixture.SequenceDiagram.Activate("pull/2/merge"); - fixture.AssertFullSemver("1.2.1-PullRequest0002.1"); + fixture.AssertFullSemver("1.2.1-PullRequest2.1"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.2.1-PullRequest0002.2"); + fixture.AssertFullSemver("1.2.1-PullRequest2.2"); // Merge into main fixture.Checkout(MainBranch); @@ -358,7 +354,7 @@ public void GitHubFlowPullRequestBranch() fixture.SequenceDiagram.Destroy("pull/2/merge"); fixture.SequenceDiagram.NoteOver("Feature branches/pr's should\r\n" + "be deleted once merged", "pull/2/merge"); - fixture.AssertFullSemver("1.2.1+3"); + fixture.AssertFullSemver("1.2.1-3"); } [Test] @@ -380,15 +376,15 @@ public void GitHubFlowMajorRelease() // Apply beta.1 tag should be exact tag fixture.ApplyTag("2.0.0-beta.1"); - fixture.AssertFullSemver("2.0.0-beta.1"); + fixture.AssertFullSemver("2.0.0-beta.2+0"); // test that the CommitsSinceVersionSource should still return commit count var version = fixture.GetVersion(); - version.CommitsSinceVersionSource.ShouldBe("2"); + version.CommitsSinceVersionSource.ShouldBe("0"); // Make a commit after a tag should bump up the beta fixture.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.2+3"); + fixture.AssertFullSemver("2.0.0-beta.2+1"); // Complete release fixture.Checkout(MainBranch); @@ -396,11 +392,11 @@ public void GitHubFlowMajorRelease() fixture.SequenceDiagram.Destroy("release/2.0.0"); fixture.SequenceDiagram.NoteOver("Release branches are deleted once merged", "release/2.0.0"); - fixture.AssertFullSemver("2.0.0+0"); + fixture.AssertFullSemver("2.0.0-4"); fixture.ApplyTag("2.0.0"); fixture.AssertFullSemver("2.0.0"); fixture.MakeACommit(); fixture.Repository.DumpGraph(); - fixture.AssertFullSemver("2.0.1+1"); + fixture.AssertFullSemver("2.0.1-1"); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitFlow.cs b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitFlow.cs new file mode 100644 index 0000000000..b72cb67ccf --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitFlow.cs @@ -0,0 +1,1058 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; +using LibGit2Sharp; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +public class DocumentationSamplesForGitFlow +{ + [TestCase(false)] + [TestCase(true)] + public void FeatureFromMainBranch(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "feature/foo"; + fixture.BranchTo(branchName, "feature"); + fixture.SequenceDiagram.Activate("feature"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-foo.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-foo.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("1.2.1"); + fixture.AssertFullSemver("1.2.1", configuration); + + // Merge main to feature branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-foo.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-foo.1+3", configuration); + + // Create pre-release on feature branch + fixture.ApplyTag("2.0.0-foo.1"); + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge feature into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void FeatureFromMainBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "feature/foo"; + fixture.BranchTo(branchName, "feature"); + fixture.SequenceDiagram.Activate("feature"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-foo.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-foo.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to feature branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-foo.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-foo.1+3", configuration); + + // Create pre-release on feature branch + fixture.ApplyTag("2.0.0-foo.1"); + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge feature into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void HotfixBranch(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "hotfix/next"; + fixture.BranchTo(branchName, "hotfix"); + fixture.SequenceDiagram.Activate("hotfix"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("1.2.1"); + fixture.AssertFullSemver("1.2.1", configuration); + + // Merge main to hotfix branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-beta.1+3", configuration); + + // Create pre-release on hotfix branch + fixture.ApplyTag("2.0.0-beta.1"); + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge hotfix into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Hotfix branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void HotfixBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "hotfix/next"; + fixture.BranchTo(branchName, "hotfix"); + fixture.SequenceDiagram.Activate("hotfix"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to hotfix branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-beta.1+3", configuration); + + // Create pre-release on hotfix branch + fixture.ApplyTag("2.0.0-beta.1"); + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge hotfix into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Hotfix branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void VersionedHotfixBranch(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "hotfix/2.2.1"; + fixture.BranchTo(branchName, "hotfix"); + fixture.SequenceDiagram.Activate("hotfix"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("2.2.1"); + fixture.AssertFullSemver("2.2.1", configuration); + + // Merge main to hotfix branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.2-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + // Create pre-release on hotfix branch + fixture.ApplyTag("3.0.1-beta.1"); + fixture.AssertFullSemver("3.0.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("3.0.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("3.0.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge hotfix into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Hotfix branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("3.0.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("3.0.1-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void VersionedHotfixBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "hotfix/2.2.1"; + fixture.BranchTo(branchName, "hotfix"); + fixture.SequenceDiagram.Activate("hotfix"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to hotfix branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.2.1-beta.1+3", configuration); + + // Create pre-release on hotfix branch + fixture.ApplyTag("2.2.2-beta.1"); + fixture.AssertFullSemver("2.2.2-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.2-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.2.2-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge hotfix into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Hotfix branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.2.2-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.3-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void ReleaseBranch(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "release/next"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.3.0-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("1.2.1"); + fixture.AssertFullSemver("1.2.1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.3.0-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.0.1-beta.1"); + fixture.AssertFullSemver("2.0.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.1-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void ReleaseBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "release/next"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.3.0-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.3.0-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.0.1-beta.1"); + fixture.AssertFullSemver("2.0.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.2-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void VersionedReleaseBranch(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "release/2.2.1"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("2.2.1"); + fixture.AssertFullSemver("2.2.1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.3.0-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("3.0.0-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("3.0.1-beta.1"); + fixture.AssertFullSemver("3.0.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("3.0.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("3.0.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("3.0.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("3.0.1-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void VersionedReleaseBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "release/2.2.1"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.2.1-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.2.1-beta.1"); + fixture.AssertFullSemver("2.2.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.2.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.2.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.2-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void DevelopBranch(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.SequenceDiagram.Participant("main"); + fixture.SequenceDiagram.Participant("develop"); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "develop"; + fixture.BranchTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.SequenceDiagram.Activate(branchName); + fixture.AssertFullSemver("1.3.0-alpha.0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-alpha.1", configuration); + + // Create release from develop branch + fixture.BranchTo("release/1.3.0", "release"); + fixture.SequenceDiagram.Deactivate("develop"); + fixture.SequenceDiagram.Activate("release"); + fixture.AssertFullSemver("1.3.0-beta.1+1", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-beta.1+2", configuration); + + // Bump to major version increment + fixture.Checkout("develop"); + fixture.SequenceDiagram.Activate("develop"); + fixture.AssertFullSemver("1.4.0-alpha.0", configuration); + + // Merge release into develop branch + fixture.MergeNoFF("release/1.3.0"); + fixture.AssertFullSemver("1.4.0-alpha.2", configuration); + + // Merge release into main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MergeNoFF("release/1.3.0"); + fixture.Remove("release/1.3.0"); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", "release"); + fixture.ApplyTag("1.3.0"); + fixture.AssertFullSemver("1.3.0", configuration); + + // Create hotfix on main branch + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.1-1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.4.0-alpha.3", configuration); + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-alpha.4", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.1.0-alpha.1"); + fixture.AssertFullSemver("2.1.0-alpha.1", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-alpha.2", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.1.0-PullRequest2.6", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge develop into main branch + fixture.MergeNoFF(branchName); + fixture.SequenceDiagram.Deactivate(branchName); + fixture.AssertFullSemver("2.1.0-6", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-7", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void DevelopBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.TrackReleaseBranches, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.SequenceDiagram.Participant("main"); + fixture.SequenceDiagram.Participant("develop"); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "develop"; + fixture.BranchTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.SequenceDiagram.Activate(branchName); + fixture.AssertFullSemver("1.3.0-alpha.0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-alpha.1", configuration); + + // Create release from develop branch + fixture.BranchTo("release/1.3.0", "release"); + fixture.SequenceDiagram.Deactivate("develop"); + fixture.SequenceDiagram.Activate("release"); + fixture.AssertFullSemver("1.3.0-beta.1+1", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.0-beta.1+2", configuration); + + // Bump to major version increment + fixture.Checkout("develop"); + fixture.SequenceDiagram.Activate("develop"); + fixture.AssertFullSemver("1.4.0-alpha.0", configuration); + + // Merge release into develop branch + fixture.MergeNoFF("release/1.3.0"); + fixture.AssertFullSemver("1.4.0-alpha.2", configuration); + + // Merge release into main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MergeNoFF("release/1.3.0"); + fixture.Remove("release/1.3.0"); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", "release"); + + // Create hotfix on main branch + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.1-1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.4.0-alpha.2", configuration); + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-alpha.3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.1.0-alpha.1"); + fixture.AssertFullSemver("2.1.0-alpha.1", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.0-alpha.2", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.1.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge develop into main branch + fixture.MergeNoFF(branchName); + fixture.SequenceDiagram.Deactivate(branchName); + fixture.AssertFullSemver("2.1.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.1.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void SupportBranch(bool withPullRequestIntoSupport) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.SequenceDiagram.Participant("main"); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + fixture.BranchToFromTag("support/1.x", "1.2.0", "main", "support"); + fixture.SequenceDiagram.Activate("support"); + fixture.AssertFullSemver("1.2.0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-1", configuration); + fixture.ApplyTag("2.0.0"); + fixture.AssertFullSemver("2.0.0", configuration); + + fixture.Checkout("support/1.x"); + fixture.BranchTo("hotfix/1.2.2", "hotfix"); + fixture.SequenceDiagram.Deactivate("support"); + fixture.SequenceDiagram.Activate("hotfix"); + fixture.AssertFullSemver("1.2.2-beta.1+1", configuration); + fixture.MakeACommit(); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.2-beta.1+3", configuration); + fixture.ApplyTag("1.2.3-beta.1"); + fixture.AssertFullSemver("1.2.3-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.3-beta.2+1", configuration); + fixture.Checkout("support/1.x"); + + if (withPullRequestIntoSupport) + { + // Create a PullRequest into support + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF("hotfix/1.2.2"); + fixture.AssertFullSemver("1.2.3-PullRequest2.5", configuration); + fixture.Checkout("support/1.x"); + fixture.Remove("pull/2/merge"); + } + + // Merge hotfix into support branch + fixture.MergeNoFF("hotfix/1.2.2"); + fixture.Remove("hotfix/1.2.2"); + fixture.SequenceDiagram.NoteOver("Hotfix branches should\r\nbe deleted once merged", "hotfix/1.2.2"); + fixture.AssertFullSemver("1.2.3-5", configuration); + + // Commit on support branch + fixture.SequenceDiagram.Activate("support"); + fixture.ApplyTag("1.2.3"); + fixture.AssertFullSemver("1.2.3", configuration); + + fixture.Checkout("main"); + fixture.AssertFullSemver("2.0.0", configuration); + fixture.MergeNoFF("support/1.x"); + fixture.AssertFullSemver("2.0.1-6", configuration); + fixture.ApplyTag("2.0.1"); + fixture.AssertFullSemver("2.0.1", configuration); + + fixture.Checkout("support/1.x"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.4-1", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("support/1.x"); + fixture.AssertFullSemver("2.0.2-2", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void SupportBranchWithMainline(bool withPullRequestIntoSupport) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.TrackReleaseBranches, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.SequenceDiagram.Participant("main"); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + fixture.BranchToFromTag("support/1.x", "1.2.0", "main", "support"); + fixture.SequenceDiagram.Activate("support"); + fixture.AssertFullSemver("1.2.0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.0.0-1", configuration); + + fixture.Checkout("support/1.x"); + fixture.BranchTo("hotfix/1.2.2", "hotfix"); + fixture.SequenceDiagram.Deactivate("support"); + fixture.SequenceDiagram.Activate("hotfix"); + fixture.AssertFullSemver("1.2.2-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.2-beta.1+2", configuration); + fixture.ApplyTag("1.2.3-beta.1"); + fixture.AssertFullSemver("1.2.3-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.3-beta.2+1", configuration); + fixture.Checkout("support/1.x"); + + if (withPullRequestIntoSupport) + { + // Create a PullRequest into support + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF("hotfix/1.2.2"); + fixture.AssertFullSemver("1.2.3-PullRequest2.4", configuration); + fixture.Checkout("support/1.x"); + fixture.Remove("pull/2/merge"); + } + + // Merge hotfix into support branch + fixture.MergeNoFF("hotfix/1.2.2"); + fixture.Remove("hotfix/1.2.2"); + fixture.SequenceDiagram.NoteOver("Hotfix branches should\r\nbe deleted once merged", "hotfix/1.2.2"); + fixture.AssertFullSemver("1.2.3-4", configuration); + + // Commit on support branch + fixture.SequenceDiagram.Activate("support"); + + fixture.Checkout("main"); + fixture.AssertFullSemver("2.0.0-1", configuration); + //fixture.MergeNoFF("support/1.x"); + //fixture.AssertFullSemver("2.0.1-6", configuration); + + //fixture.Checkout("support/1.x"); + //fixture.MakeACommit(); + //fixture.AssertFullSemver("1.2.4-1", configuration); + + //fixture.Checkout("main"); + //fixture.MergeNoFF("support/1.x"); + //fixture.AssertFullSemver("2.0.2-2", configuration); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitHubFlow.cs b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitHubFlow.cs new file mode 100644 index 0000000000..0f0aaf4202 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/DocumentationSamplesForGitHubFlow.cs @@ -0,0 +1,432 @@ +using GitVersion.Configuration; +using GitVersion.VersionCalculation; +using LibGit2Sharp; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +public class DocumentationSamplesForGitHubFlow +{ + [TestCase(false)] + [TestCase(true)] + public void FeatureBranch(bool withPullRequestIntoMain) + { + var configuration = GitHubFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "feature/foo"; + fixture.BranchTo(branchName, "feature"); + fixture.SequenceDiagram.Activate("feature"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-foo.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-foo.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("1.2.1"); + fixture.AssertFullSemver("1.2.1", configuration); + + // Merge main to feature branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-foo.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-foo.1+3", configuration); + + // Create pre-release on feature branch + fixture.ApplyTag("2.0.0-foo.1"); + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge feature into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void FeatureBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "feature/foo"; + fixture.BranchTo(branchName, "feature"); + fixture.SequenceDiagram.Activate("feature"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-foo.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-foo.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to feature branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-foo.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-foo.1+3", configuration); + + // Create pre-release on feature branch + fixture.ApplyTag("2.0.0-foo.1"); + fixture.AssertFullSemver("2.0.0-foo.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.0-foo.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.0.0-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge feature into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Feature branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.0.0-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.0.1-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void ReleaseBranch(bool withPullRequestIntoMain) + { + var configuration = GitHubFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "release/next"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("1.2.1"); + fixture.AssertFullSemver("1.2.1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("1.3.1-beta.1"); + fixture.AssertFullSemver("1.3.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("1.3.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("1.3.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.1-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void ReleaseBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "release/next"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("1.2.2-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("1.3.0-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("1.3.1-beta.1"); + fixture.AssertFullSemver("1.3.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("1.3.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("1.3.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.3.2-1", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void VersionedReleaseBranch(bool withPullRequestIntoMain) + { + var configuration = GitHubFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.Repository.MakeACommit(); + fixture.ApplyTag("1.2.0"); + fixture.AssertFullSemver("1.2.0", configuration); + + // Branch from main + const string branchName = "release/2.2.1"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + fixture.ApplyTag("2.2.1"); + fixture.AssertFullSemver("2.2.1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.2-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: minor"); + fixture.AssertFullSemver("2.3.0-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.3.1-beta.1"); + fixture.AssertFullSemver("2.3.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.3.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.3.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.3.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.3.1-6", configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void VersionedReleaseBranchWithMainline(bool withPullRequestIntoMain) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithNextVersion("1.2.0") + .WithVersionStrategies(VersionStrategies.ConfiguredNextVersion, VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + // GitFlow setup + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.0-1", configuration); + fixture.Repository.ApplyTag("1.2.0"); + + // Branch from main + const string branchName = "release/2.2.1"; + fixture.BranchTo(branchName, "release"); + fixture.SequenceDiagram.Activate("release"); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.1+1", configuration); + + // Create hotfix on main branch + fixture.Checkout("main"); + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.2.1-1", configuration); + + // Merge main to release branch + fixture.MergeTo(branchName); + fixture.SequenceDiagram.Deactivate("main"); + fixture.AssertFullSemver("2.2.1-beta.1+2", configuration); + + // Bump to minor version increment + fixture.MakeACommit("+semver: major"); + fixture.AssertFullSemver("2.2.1-beta.1+3", configuration); + + // Create pre-release on release branch + fixture.ApplyTag("2.2.1-beta.1"); + fixture.AssertFullSemver("2.2.1-beta.2+0", configuration); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.1-beta.2+1", configuration); + fixture.Checkout("main"); + + if (withPullRequestIntoMain) + { + // Create a PullRequest into main + fixture.BranchTo("pull/2/merge", "pull"); + fixture.SequenceDiagram.Activate("pull/2/merge"); + fixture.MergeNoFF(branchName); + fixture.AssertFullSemver("2.2.1-PullRequest2.5", configuration); + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + } + + // Merge release into main branch + fixture.MergeNoFF(branchName); + fixture.Remove(branchName); + fixture.SequenceDiagram.NoteOver("Release branches should\r\nbe deleted once merged", branchName); + fixture.AssertFullSemver("2.2.1-5", configuration); + + // Commit on main branch + fixture.SequenceDiagram.Activate("main"); + fixture.MakeACommit(); + fixture.AssertFullSemver("2.2.2-1", configuration); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/FallbackVersionStrategyScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/FallbackVersionStrategyScenarios.cs new file mode 100644 index 0000000000..9076c18b5c --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/FallbackVersionStrategyScenarios.cs @@ -0,0 +1,127 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +public class FallbackVersionStrategyScenarios : TestBase +{ + private static GitHubFlowConfigurationBuilder ConfigurationBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Fallback) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [TestCase(IncrementStrategy.None, "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "1.0.0-1+1")] + public void EnsureVersionIncrementOnMainWillBeUsed(IncrementStrategy increment, string expected) + { + var configuration = ConfigurationBuilder + .WithBranch("main", b => b.WithIncrement(increment)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver(expected, configuration); + } + + [TestCase(IncrementStrategy.None, "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "1.0.0-1+1")] + public void EnsureVersionIncrementOnMessageWillBeUsed(IncrementStrategy increment, string expected) + { + var configuration = ConfigurationBuilder + .WithBranch("main", b => b.WithIncrement(IncrementStrategy.None)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit($"+semver: {increment}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver(expected, configuration); + } + + [TestCase(false)] + [TestCase(true)] + public void TakeTheLatestCommitAsBaseVersion(bool mode) + { + var configuration = ConfigurationBuilder + .WithBranch("main", b => b + .WithIncrement(IncrementStrategy.Major) + .WithTrackMergeTarget(true) + .WithTracksReleaseBranches(false) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("release/foo"); + fixture.Checkout("main"); + + fixture.MakeACommit("B"); + if (mode) + { + fixture.MergeTo("release/foo"); + fixture.ApplyTag("0.0.0"); + fixture.Checkout("main"); + } + else + { + fixture.ApplyTag("0.0.0"); + } + + fixture.MakeACommit("C"); + if (mode) + { + fixture.ApplyTag("0.0.1"); + } + else + { + fixture.MergeTo("release/foo"); + fixture.ApplyTag("0.0.1"); + fixture.Checkout("main"); + } + + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1+1", configuration); + } + + [TestCase(false, "1.0.0-1+4")] + [TestCase(true, "1.0.0-1+2")] + public void TakeTheCommitBranchedFromAsBaseVersionWhenTracksReleaseBranchesIsTrue( + bool tracksReleaseBranches, string version) + { + var configuration = ConfigurationBuilder + .WithBranch("main", b => b + .WithIncrement(IncrementStrategy.Major) + .WithTrackMergeTarget(false) + .WithTracksReleaseBranches(tracksReleaseBranches) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.BranchTo("release/foo"); + fixture.Checkout("main"); + fixture.MakeACommit("C"); + fixture.Checkout("release/foo"); + fixture.MakeACommit("D"); + fixture.ApplyTag("0.0.0"); + fixture.Checkout("main"); + fixture.MakeACommit("D"); + + // ✅ succeeds as expected + fixture.AssertFullSemver(version, configuration); + + fixture.Repository.DumpGraph(); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs index b5d81bc45d..0f2f64c1ff 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/FeatureBranchScenarios.cs @@ -1,10 +1,7 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -39,22 +36,13 @@ public void ShouldInheritIncrementCorrectlyWithMultiplePossibleParentsAndWeirdly [Test] public void BranchCreatedAfterFastForwardMergeShouldInheritCorrectly() { - var config = new Config - { - Branches = - { - { - "unstable", - new BranchConfig - { - Increment = IncrementStrategy.Minor, - Regex = "unstable", - SourceBranches = new HashSet(), - IsSourceBranchFor = new HashSet { "feature" } - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("unstable", builder => builder + .WithIncrement(IncrementStrategy.Minor) + .WithRegularExpression("unstable") + .WithSourceBranches() + .WithIsSourceBranchFor("feature")) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.0"); @@ -75,7 +63,7 @@ public void BranchCreatedAfterFastForwardMergeShouldInheritCorrectly() Commands.Checkout(fixture.Repository, "feature/JIRA-124"); fixture.Repository.MakeCommits(1); - fixture.AssertFullSemver("1.1.0-JIRA-124.1+2", config); + fixture.AssertFullSemver("1.1.0-JIRA-124.1+2", configuration); } [Test] @@ -141,7 +129,7 @@ public void WhenTwoFeatureBranchPointToTheSameCommit() fixture.Repository.CreateBranch("feature/feature2"); Commands.Checkout(fixture.Repository, "feature/feature2"); - fixture.AssertFullSemver("0.1.0-feature2.1+1"); + fixture.AssertFullSemver("0.1.0-feature2.1+2"); } [Test] @@ -168,21 +156,20 @@ public void ShouldBePossibleToMergeDevelopForALongRunningBranchWhereDevelopAndMa Commands.Checkout(fixture.Repository, branchName); fixture.Repository.Merge(fixture.Repository.Branches["develop"], Generate.SignatureNow()); - var configuration = new Config { VersioningMode = VersioningMode.ContinuousDeployment }; + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithBranch("feature", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); fixture.AssertFullSemver("1.2.0-longrunning.2", configuration); } [Test] public void CanUseBranchNameOffAReleaseBranch() { - var config = new Config - { - Branches = - { - { "release", new BranchConfig { Tag = "build" } }, - { "feature", new BranchConfig { Tag = "useBranchName" } } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("release", builder => builder.WithLabel("build")) + .WithBranch("feature", builder => builder.WithLabel(ConfigurationConstants.BranchNamePlaceholder)) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -192,31 +179,28 @@ public void CanUseBranchNameOffAReleaseBranch() fixture.BranchTo("feature/PROJ-1"); fixture.MakeACommit(); - fixture.AssertFullSemver("0.3.0-PROJ-1.1+2", config); + fixture.AssertFullSemver("0.3.0-PROJ-1.1+4", configuration); } - [TestCase("alpha", "JIRA-123", "alpha")] - [TestCase("useBranchName", "JIRA-123", "JIRA-123")] - [TestCase("alpha.{BranchName}", "JIRA-123", "alpha.JIRA-123")] - public void ShouldUseConfiguredTag(string tag, string featureName, string preReleaseTagName) + [TestCase("alpha", "JIRA-123", "^features?[/-](?.+)", "alpha")] + [TestCase($"alpha.{ConfigurationConstants.BranchNamePlaceholder}", "JIRA-123", "^features?[/-](?.+)", "alpha.JIRA-123")] + [TestCase("{BranchName}-of-task-number-{TaskNumber}", "4711_this-is-a-feature", "^features?[/-](?\\d+)_(?.+)", "this-is-a-feature-of-task-number-4711")] + public void ShouldUseConfiguredLabel(string label, string featureName, string regularExpression, string preReleaseLabelName) { - var config = new Config - { - Branches = - { - { "feature", new BranchConfig { Tag = tag } } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("feature", builder => builder + .WithLabel(label) + .WithRegularExpression(regularExpression)) + .Build(); using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeATaggedCommit("1.0.0"); + fixture.MakeATaggedCommit("1.0.0"); var featureBranchName = $"feature/{featureName}"; - fixture.Repository.CreateBranch(featureBranchName); - Commands.Checkout(fixture.Repository, featureBranchName); + fixture.BranchTo(featureBranchName); fixture.Repository.MakeCommits(5); - var expectedFullSemVer = $"1.0.1-{preReleaseTagName}.1+5"; - fixture.AssertFullSemver(expectedFullSemVer, config); + var expectedFullSemVer = $"1.0.1-{preReleaseLabelName}.1+5"; + fixture.AssertFullSemver(expectedFullSemVer, configuration); } [Test] @@ -229,7 +213,7 @@ public void BranchCreatedAfterFinishReleaseShouldInheritAndIncrementFromLastMain Commands.Checkout(fixture.Repository, "release/0.2.0"); //validate release version - fixture.AssertFullSemver("0.2.0-beta.1+0"); + fixture.AssertFullSemver("0.2.0-beta.1+1"); fixture.Checkout(MainBranch); fixture.Repository.MergeNoFF("release/0.2.0"); @@ -251,7 +235,7 @@ public void BranchCreatedAfterFinishReleaseShouldInheritAndIncrementFromLastMain fixture.BranchTo("feature/TEST-1"); fixture.Repository.MakeACommit(); - //I'm not entirely sure what the + value should be but I know the semvar major/minor/patch should be 0.3.0 + //I'm not entirely sure what the + value should be, but I know the semver major/minor/patch should be 0.3.0 fixture.AssertFullSemver("0.3.0-TEST-1.1+2"); } @@ -263,7 +247,7 @@ public void ShouldPickUpVersionFromDevelopAfterReleaseBranchCreated() fixture.MakeACommit(); fixture.BranchTo("develop"); fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); fixture.Checkout("develop"); fixture.MakeACommit(); @@ -282,12 +266,12 @@ public void ShouldPickUpVersionFromDevelopAfterReleaseBranchMergedBack() fixture.MakeACommit(); fixture.BranchTo("develop"); fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); // merge release into develop fixture.Checkout("develop"); - fixture.MergeNoFF("release/1.0"); + fixture.MergeNoFF("release/1.0.0"); fixture.AssertFullSemver("1.1.0-alpha.2"); // create a feature branch from develop and verify the version @@ -300,65 +284,45 @@ public class WhenMainAsIsDevelop [Test] public void ShouldPickUpVersionFromMainAfterReleaseBranchCreated() { - var config = new Config - { - Branches = new Dictionary - { - { - MainBranch, new BranchConfig - { - TracksReleaseBranches = true, - Regex = MainBranch - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch(MainBranch, builder => builder.WithTracksReleaseBranches(true)) + .Build(); using var fixture = new EmptyRepositoryFixture(); // Create release branch fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); fixture.Checkout(MainBranch); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.1+1", config); + fixture.AssertFullSemver("1.0.1-1", configuration); // create a feature branch from main and verify the version fixture.BranchTo("feature/test"); - fixture.AssertFullSemver("1.0.1-test.1+1", config); + fixture.AssertFullSemver("1.0.1-test.1+1", configuration); } [Test] public void ShouldPickUpVersionFromMainAfterReleaseBranchMergedBack() { - var config = new Config - { - Branches = new Dictionary - { - { - MainBranch, new BranchConfig - { - TracksReleaseBranches = true, - Regex = MainBranch - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch(MainBranch, builder => builder.WithTracksReleaseBranches(true)) + .Build(); using var fixture = new EmptyRepositoryFixture(); // Create release branch fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); // merge release into main fixture.Checkout(MainBranch); - fixture.MergeNoFF("release/1.0"); - fixture.AssertFullSemver("1.0.1+2", config); + fixture.MergeNoFF("release/1.0.0"); + fixture.AssertFullSemver("1.0.1-2", configuration); // create a feature branch from main and verify the version fixture.BranchTo("feature/test"); - fixture.AssertFullSemver("1.0.1-test.1+2", config); + fixture.AssertFullSemver("1.0.1-test.1+2", configuration); } } @@ -372,13 +336,13 @@ public void ShouldPickUpVersionFromMainAfterReleaseBranchCreated() fixture.MakeACommit(); fixture.BranchTo("develop"); fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); fixture.Checkout("develop"); fixture.MakeACommit(); fixture.AssertFullSemver("1.1.0-alpha.1"); - // create a misnamed feature branch (i.e. it uses the default config) from develop and verify the version + // create a misnamed feature branch (i.e. it uses the default configuration) from develop and verify the version fixture.BranchTo("misnamed"); fixture.AssertFullSemver("1.1.0-misnamed.1+1"); } @@ -391,15 +355,15 @@ public void ShouldPickUpVersionFromDevelopAfterReleaseBranchMergedBack() fixture.MakeACommit(); fixture.BranchTo("develop"); fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); // merge release into develop fixture.Checkout("develop"); - fixture.MergeNoFF("release/1.0"); + fixture.MergeNoFF("release/1.0.0"); fixture.AssertFullSemver("1.1.0-alpha.2"); - // create a misnamed feature branch (i.e. it uses the default config) from develop and verify the version + // create a misnamed feature branch (i.e. it uses the default configuration) from develop and verify the version fixture.BranchTo("misnamed"); fixture.AssertFullSemver("1.1.0-misnamed.1+2"); } @@ -410,65 +374,45 @@ public class WhenMainMarkedAsIsDevelop [Test] public void ShouldPickUpVersionFromMainAfterReleaseBranchCreated() { - var config = new Config - { - Branches = new Dictionary - { - { - MainBranch, new BranchConfig - { - TracksReleaseBranches = true, - Regex = MainBranch - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch(MainBranch, builder => builder.WithTracksReleaseBranches(true)) + .Build(); using var fixture = new EmptyRepositoryFixture(); // Create release branch fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); fixture.Checkout(MainBranch); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.1+1", config); + fixture.AssertFullSemver("1.0.1-1", configuration); - // create a misnamed feature branch (i.e. it uses the default config) from main and verify the version + // create a misnamed feature branch (i.e. it uses the default configuration) from main and verify the version fixture.BranchTo("misnamed"); - fixture.AssertFullSemver("1.0.1-misnamed.1+1", config); + fixture.AssertFullSemver("1.0.1-misnamed.1+1", configuration); } [Test] public void ShouldPickUpVersionFromMainAfterReleaseBranchMergedBack() { - var config = new Config - { - Branches = new Dictionary - { - { - MainBranch, new BranchConfig - { - TracksReleaseBranches = true, - Regex = MainBranch - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch(MainBranch, builder => builder.WithTracksReleaseBranches(true)) + .Build(); using var fixture = new EmptyRepositoryFixture(); // Create release branch fixture.MakeACommit(); - fixture.BranchTo("release/1.0"); + fixture.BranchTo("release/1.0.0"); fixture.MakeACommit(); // merge release into main fixture.Checkout(MainBranch); - fixture.MergeNoFF("release/1.0"); - fixture.AssertFullSemver("1.0.1+2", config); + fixture.MergeNoFF("release/1.0.0"); + fixture.AssertFullSemver("1.0.1-2", configuration); - // create a misnamed feature branch (i.e. it uses the default config) from main and verify the version + // create a misnamed feature branch (i.e. it uses the default configuration) from main and verify the version fixture.BranchTo("misnamed"); - fixture.AssertFullSemver("1.0.1-misnamed.1+2", config); + fixture.AssertFullSemver("1.0.1-misnamed.1+2", configuration); } } } @@ -476,27 +420,12 @@ public void ShouldPickUpVersionFromMainAfterReleaseBranchMergedBack() [Test] public void PickUpVersionFromMainMarkedWithIsTracksReleaseBranches() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDelivery, - Branches = new Dictionary - { - { - MainBranch, new BranchConfig - { - Tag = "pre", - TracksReleaseBranches = true - } - }, - { - "release", new BranchConfig - { - IsReleaseBranch = true, - Tag = "rc" - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithBranch("unknown", builder => builder.WithIncrement(IncrementStrategy.Patch).WithTracksReleaseBranches(true)) + .WithBranch(MainBranch, builder => builder.WithLabel("pre").WithTracksReleaseBranches(true)) + .WithBranch("release", builder => builder.WithLabel("rc")) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -505,46 +434,33 @@ public void PickUpVersionFromMainMarkedWithIsTracksReleaseBranches() fixture.BranchTo("release/0.10.0"); fixture.MakeACommit(); fixture.MakeACommit(); - fixture.AssertFullSemver("0.10.0-rc.1+2", config); + fixture.AssertFullSemver("0.10.0-rc.1+3", configuration); // switch to main and verify the version fixture.Checkout(MainBranch); fixture.MakeACommit(); - fixture.AssertFullSemver("0.10.1-pre.1+1", config); + fixture.AssertFullSemver("0.10.1-pre.1+1", configuration); // create a feature branch from main and verify the version fixture.BranchTo("MyFeatureD"); - fixture.AssertFullSemver("0.10.1-MyFeatureD.1+1", config); + fixture.AssertFullSemver("0.10.1-MyFeatureD.1+1", configuration); } [Test] public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment, - AssemblyVersioningScheme = AssemblyVersioningScheme.Major, - AssemblyFileVersioningFormat = "{MajorMinorPatch}.{env:WeightedPreReleaseNumber ?? 0}", - LegacySemVerPadding = 4, - BuildMetaDataPadding = 4, - CommitsSinceVersionSourcePadding = 4, - CommitMessageIncrementing = CommitMessageIncrementMode.Disabled, - Branches = new Dictionary - { - { - "develop", new BranchConfig - { - PreventIncrementOfMergedBranchVersion = true - } - }, - { - "feature", new BranchConfig - { - Tag = "feat-{BranchName}" - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyVersioningScheme(AssemblyVersioningScheme.Major) + .WithAssemblyFileVersioningFormat("{MajorMinorPatch}.{env:WeightedPreReleaseNumber ?? 0}") + .WithBranch("main", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithBranch("develop", builder => builder.WithPreventIncrementOfMergedBranch(true)) + .WithBranch("feature", builder => builder + .WithLabel($"feat-{ConfigurationConstants.BranchNamePlaceholder}") + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + ) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); fixture.BranchTo("develop"); @@ -557,6 +473,6 @@ public void ShouldHaveAGreaterSemVerAfterDevelopIsMergedIntoFeature() fixture.MakeACommit(); fixture.Checkout("feature/featX"); fixture.MergeNoFF("develop"); - fixture.AssertFullSemver("16.24.0-feat-featX.4", config); + fixture.AssertFullSemver("16.24.0-feat-featX.4", configuration); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/FileSystemTests.cs b/src/GitVersion.Core.Tests/IntegrationTests/FileSystemTests.cs index a2775f3198..5c81294ff3 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/FileSystemTests.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/FileSystemTests.cs @@ -1,6 +1,4 @@ using GitVersion.Core.Tests.Helpers; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; @@ -32,7 +30,7 @@ public void WhenFileExistsWithEncodingPreambleEncodingIsPreservedAfterWriteAll(s using var stream = File.OpenRead(TempFilePath); var preamble = encoding.GetPreamble(); var bytes = new byte[preamble.Length]; - stream.Read(bytes, 0, preamble.Length); + _ = stream.Read(bytes, 0, preamble.Length); bytes.ShouldBe(preamble); } @@ -48,7 +46,7 @@ public void WhenFileDoesNotExistCreateWithUtf8WithPreamble() using var stream = File.OpenRead(TempFilePath); var preamble = encoding.GetPreamble(); var bytes = new byte[preamble.Length]; - stream.Read(bytes, 0, preamble.Length); + _ = stream.Read(bytes, 0, preamble.Length); bytes.ShouldBe(preamble); } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/GitflowScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/GitflowScenarios.cs index 630400c766..26ee975616 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/GitflowScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/GitflowScenarios.cs @@ -1,6 +1,4 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests { @@ -32,54 +30,54 @@ public void GitflowComplexExample() // Release 1.1.0 fixture.BranchTo(release1Branch); fixture.MakeACommit("release stabilization"); - fixture.AssertFullSemver("1.1.0-beta.1+1"); + fixture.AssertFullSemver("1.1.0-beta.1+4"); fixture.Checkout(MainBranch); fixture.MergeNoFF(release1Branch); - fixture.AssertFullSemver("1.1.0+0"); + fixture.AssertFullSemver("1.1.0-5"); fixture.ApplyTag("1.1.0"); fixture.AssertFullSemver("1.1.0"); fixture.Checkout(developBranch); fixture.MergeNoFF(release1Branch); fixture.Repository.Branches.Remove(fixture.Repository.Branches[release1Branch]); - fixture.AssertFullSemver("1.2.0-alpha.2"); + fixture.AssertFullSemver("1.2.0-alpha.1"); // Feature 2 fixture.BranchTo(feature2Branch); fixture.MakeACommit("added feature 2"); - fixture.AssertFullSemver("1.2.0-f2.1+3"); + fixture.AssertFullSemver("1.2.0-f2.1+2"); fixture.Checkout(developBranch); fixture.MergeNoFF(feature2Branch); fixture.Repository.Branches.Remove(fixture.Repository.Branches[feature2Branch]); - fixture.AssertFullSemver("1.2.0-alpha.4"); + fixture.AssertFullSemver("1.2.0-alpha.3"); // Release 1.2.0 fixture.BranchTo(release2Branch); fixture.MakeACommit("release stabilization"); - fixture.AssertFullSemver("1.2.0-beta.1+1"); + fixture.AssertFullSemver("1.2.0-beta.1+8"); fixture.Checkout(MainBranch); fixture.MergeNoFF(release2Branch); - fixture.AssertFullSemver("1.2.0+0"); + fixture.AssertFullSemver("1.2.0-5"); fixture.ApplyTag("1.2.0"); fixture.AssertFullSemver("1.2.0"); fixture.Checkout(developBranch); fixture.MergeNoFF(release2Branch); fixture.Repository.Branches.Remove(fixture.Repository.Branches[release2Branch]); - fixture.AssertFullSemver("1.3.0-alpha.2"); + fixture.AssertFullSemver("1.3.0-alpha.1"); // Hotfix fixture.Checkout(MainBranch); fixture.BranchTo(hotfixBranch); fixture.MakeACommit("added hotfix"); - fixture.AssertFullSemver("1.2.1-beta.1+7"); + fixture.AssertFullSemver("1.2.1-beta.1+1"); fixture.Checkout(MainBranch); fixture.MergeNoFF(hotfixBranch); - fixture.AssertFullSemver("1.2.1+2"); + fixture.AssertFullSemver("1.2.1-2"); fixture.ApplyTag("1.2.1"); fixture.AssertFullSemver("1.2.1"); fixture.Checkout(developBranch); fixture.MergeNoFF(hotfixBranch); fixture.Repository.Branches.Remove(fixture.Repository.Branches[hotfixBranch]); - fixture.AssertFullSemver("1.3.0-alpha.9"); + fixture.AssertFullSemver("1.3.0-alpha.2"); } } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/HotfixBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/HotfixBranchScenarios.cs index 614260e171..8bd468453a 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/HotfixBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/HotfixBranchScenarios.cs @@ -1,10 +1,6 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -25,15 +21,15 @@ public void PatchLatestReleaseExample() fixture.Repository.MakeACommit(); fixture.AssertFullSemver("1.2.1-beta.1+2"); fixture.Repository.ApplyTag("1.2.1-beta.1"); - fixture.AssertFullSemver("1.2.1-beta.1"); + fixture.AssertFullSemver("1.2.1-beta.2+0"); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("1.2.1-beta.2+3"); + fixture.AssertFullSemver("1.2.1-beta.2+1"); // Merge hotfix branch to main Commands.Checkout(fixture.Repository, MainBranch); fixture.Repository.MergeNoFF("hotfix-1.2.1", Generate.SignatureNow()); - fixture.AssertFullSemver("1.2.1+4"); + fixture.AssertFullSemver("1.2.1-4"); fixture.Repository.ApplyTag("1.2.1"); fixture.AssertFullSemver("1.2.1"); @@ -43,7 +39,7 @@ public void PatchLatestReleaseExample() fixture.AssertFullSemver("1.3.0-alpha.1"); fixture.Repository.MergeNoFF("hotfix-1.2.1", Generate.SignatureNow()); - fixture.AssertFullSemver("1.3.0-alpha.5"); + fixture.AssertFullSemver("1.3.0-alpha.2"); } [Test] @@ -56,13 +52,15 @@ public void CanTakeVersionFromHotfixesBranch() r.MakeATaggedCommit("2.0.0"); }); // Merge hotfix branch to support - Commands.Checkout(fixture.Repository, MainBranch); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("support-1.1", (Commit)fixture.Repository.Tags.Single(t => t.FriendlyName == "1.1.0").Target)); + var branch = fixture.Repository.CreateBranch( + "support-1.1", (Commit)fixture.Repository.Tags.Single(t => t.FriendlyName == "1.1.0").Target + ); + Commands.Checkout(fixture.Repository, branch); fixture.AssertFullSemver("1.1.0"); // create hotfix branch Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("hotfixes/1.1.1")); - fixture.AssertFullSemver("1.1.0"); // We are still on a tagged commit + fixture.AssertFullSemver("1.1.1-beta.1+0"); fixture.Repository.MakeACommit(); fixture.AssertFullSemver("1.1.1-beta.1+1"); @@ -80,44 +78,44 @@ public void PatchOlderReleaseExample() r.MakeATaggedCommit("2.0.0"); }); // Merge hotfix branch to support - Commands.Checkout(fixture.Repository, MainBranch); + fixture.Checkout(MainBranch); var tag = fixture.Repository.Tags.Single(t => t.FriendlyName == "1.1.0"); - var supportBranch = fixture.Repository.CreateBranch("support-1.1", (Commit)tag.Target); - Commands.Checkout(fixture.Repository, supportBranch); + fixture.Repository.CreateBranch("support-1.1", (Commit)tag.Target); + fixture.Checkout("support-1.1"); fixture.AssertFullSemver("1.1.0"); // create hotfix branch - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("hotfix-1.1.1")); - fixture.AssertFullSemver("1.1.0"); // We are still on a tagged commit - fixture.Repository.MakeACommit(); + fixture.BranchTo("hotfix-1.1.1"); + fixture.AssertFullSemver("1.1.1-beta.1+0"); + fixture.MakeACommit(); fixture.AssertFullSemver("1.1.1-beta.1+1"); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); fixture.AssertFullSemver("1.1.1-beta.1+2"); // Create feature branch off hotfix branch and complete - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("feature/fix")); + fixture.BranchTo("feature/fix"); fixture.AssertFullSemver("1.1.1-fix.1+2"); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); fixture.AssertFullSemver("1.1.1-fix.1+3"); - fixture.Repository.CreatePullRequestRef("feature/fix", "hotfix-1.1.1", normalise: true, prNumber: 8); - fixture.AssertFullSemver("1.1.1-PullRequest0008.4"); - Commands.Checkout(fixture.Repository, "hotfix-1.1.1"); - fixture.Repository.MergeNoFF("feature/fix", Generate.SignatureNow()); + fixture.Repository.CreatePullRequestRef("feature/fix", "hotfix-1.1.1", prNumber: 8, normalise: true); + fixture.AssertFullSemver("1.1.1-PullRequest8.4"); + fixture.Checkout("hotfix-1.1.1"); + fixture.MergeNoFF("feature/fix"); fixture.AssertFullSemver("1.1.1-beta.1+4"); // Merge hotfix into support branch to complete hotfix - Commands.Checkout(fixture.Repository, "support-1.1"); - fixture.Repository.MergeNoFF("hotfix-1.1.1", Generate.SignatureNow()); - fixture.AssertFullSemver("1.1.1+5"); - fixture.Repository.ApplyTag("1.1.1"); + fixture.Checkout("support-1.1"); + fixture.MergeNoFF("hotfix-1.1.1"); + fixture.AssertFullSemver("1.1.1-5"); + fixture.ApplyTag("1.1.1"); fixture.AssertFullSemver("1.1.1"); // Verify develop version - Commands.Checkout(fixture.Repository, "develop"); + fixture.Checkout("develop"); fixture.AssertFullSemver("2.1.0-alpha.1"); - fixture.Repository.MergeNoFF("support-1.1", Generate.SignatureNow()); + fixture.MergeNoFF("support-1.1"); fixture.AssertFullSemver("2.1.0-alpha.7"); } @@ -127,11 +125,9 @@ public void PatchOlderReleaseExample() [Test] public void FeatureOnHotfixFeatureBranchDeleted() { - var config = new Config - { - AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyVersioningScheme(AssemblyVersioningScheme.MajorMinorPatchTag) + .Build(); using var fixture = new EmptyRepositoryFixture(); const string release450 = "release/4.5.0"; @@ -140,38 +136,33 @@ public void FeatureOnHotfixFeatureBranchDeleted() const string tag450 = "4.5.0"; const string featureBranch = "feature/some-bug-fix"; - fixture.Repository.MakeACommit("initial"); - fixture.Repository.CreateBranch("develop"); - Commands.Checkout(fixture.Repository, "develop"); + fixture.MakeACommit("initial"); + fixture.BranchTo("develop"); // create release branch - fixture.Repository.CreateBranch(release450); - Commands.Checkout(fixture.Repository, release450); - fixture.AssertFullSemver("4.5.0-beta.0", config); - fixture.Repository.MakeACommit("blabla"); - Commands.Checkout(fixture.Repository, "develop"); - fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); - Commands.Checkout(fixture.Repository, MainBranch); - fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); + fixture.BranchTo(release450); + fixture.AssertFullSemver("4.5.0-beta.1+1", configuration); + fixture.MakeACommit("blabla"); + fixture.Checkout("develop"); + fixture.MergeNoFF(release450); + fixture.Checkout(MainBranch); + fixture.MergeNoFF(release450); // create support branch - fixture.Repository.CreateBranch(support45); - Commands.Checkout(fixture.Repository, support45); - fixture.Repository.ApplyTag(tag450); - fixture.AssertFullSemver("4.5.0", config); + fixture.BranchTo(support45); + fixture.ApplyTag(tag450); + fixture.AssertFullSemver("4.5.0", configuration); // create hotfix branch - fixture.Repository.CreateBranch(hotfix451); - Commands.Checkout(fixture.Repository, hotfix451); + fixture.BranchTo(hotfix451); // feature branch from hotfix - fixture.Repository.CreateBranch(featureBranch); - Commands.Checkout(fixture.Repository, featureBranch); - fixture.Repository.MakeACommit("blabla"); // commit 1 - Commands.Checkout(fixture.Repository, hotfix451); - fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 + fixture.BranchTo(featureBranch); + fixture.MakeACommit("blabla"); // commit 1 + fixture.Checkout(hotfix451); + fixture.MergeNoFF(featureBranch); // commit 2 fixture.Repository.Branches.Remove(featureBranch); - fixture.AssertFullSemver("4.5.1-beta.2", config); + fixture.AssertFullSemver("4.5.1-beta.1+2", configuration); } /// @@ -180,11 +171,9 @@ public void FeatureOnHotfixFeatureBranchDeleted() [Test] public void FeatureOnHotfixFeatureBranchNotDeleted() { - var config = new Config - { - AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyVersioningScheme(AssemblyVersioningScheme.MajorMinorPatchTag) + .Build(); using var fixture = new EmptyRepositoryFixture(); const string release450 = "release/4.5.0"; @@ -193,37 +182,55 @@ public void FeatureOnHotfixFeatureBranchNotDeleted() const string tag450 = "4.5.0"; const string featureBranch = "feature/some-bug-fix"; - fixture.Repository.MakeACommit("initial"); - fixture.Repository.CreateBranch("develop"); - Commands.Checkout(fixture.Repository, "develop"); + fixture.MakeACommit("initial"); + fixture.BranchTo("develop"); // create release branch - fixture.Repository.CreateBranch(release450); - Commands.Checkout(fixture.Repository, release450); - fixture.AssertFullSemver("4.5.0-beta.0", config); - fixture.Repository.MakeACommit("blabla"); - Commands.Checkout(fixture.Repository, "develop"); - fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); - Commands.Checkout(fixture.Repository, MainBranch); - fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); + fixture.BranchTo(release450); + fixture.AssertFullSemver("4.5.0-beta.1+1", configuration); + fixture.MakeACommit("blabla"); + fixture.Checkout("develop"); + fixture.MergeNoFF(release450); + fixture.Checkout(MainBranch); + fixture.MergeNoFF(release450); // create support branch - fixture.Repository.CreateBranch(support45); - Commands.Checkout(fixture.Repository, support45); - fixture.Repository.ApplyTag(tag450); - fixture.AssertFullSemver("4.5.0", config); + fixture.BranchTo(support45); + fixture.ApplyTag(tag450); + fixture.AssertFullSemver("4.5.0", configuration); // create hotfix branch - fixture.Repository.CreateBranch(hotfix451); - Commands.Checkout(fixture.Repository, hotfix451); + fixture.BranchTo(hotfix451); // feature branch from hotfix - fixture.Repository.CreateBranch(featureBranch); - Commands.Checkout(fixture.Repository, featureBranch); - fixture.Repository.MakeACommit("blabla"); // commit 1 - Commands.Checkout(fixture.Repository, hotfix451); - fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 - fixture.AssertFullSemver("4.5.1-beta.2", config); + fixture.BranchTo(featureBranch); + fixture.MakeACommit("blabla"); // commit 1 + fixture.Checkout(hotfix451); + fixture.MergeNoFF(featureBranch); // commit 2 + + fixture.AssertFullSemver("4.5.1-beta.1+2", configuration); } + [Test] + public void IsVersionTakenFromHotfixBranchName() + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new BaseGitFlowRepositoryFixture("4.20.4"); + + fixture.Checkout("develop"); + fixture.AssertFullSemver("4.21.0-alpha.1", configuration); + + fixture.BranchTo("release/4.21.1"); + fixture.AssertFullSemver("4.21.1-beta.1+1", configuration); + + fixture.MakeACommit(); + fixture.AssertFullSemver("4.21.1-beta.1+2", configuration); + + fixture.BranchTo("hotfix/4.21.1"); + fixture.AssertFullSemver("4.21.1-beta.1+2", configuration); + + fixture.MakeACommit(); + fixture.AssertFullSemver("4.21.1-beta.1+3", configuration); + } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/IgnoreBeforeScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/IgnoreBeforeScenarios.cs deleted file mode 100644 index 78ba4c9c25..0000000000 --- a/src/GitVersion.Core.Tests/IntegrationTests/IgnoreBeforeScenarios.cs +++ /dev/null @@ -1,33 +0,0 @@ -using GitTools.Testing; -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using NSubstitute; -using NUnit.Framework; - -namespace GitVersion.Core.Tests.IntegrationTests; - -[TestFixture] -public class IgnoreBeforeScenarios : TestBase -{ - [Test] - public void ShouldFallbackToBaseVersionWhenAllCommitsAreIgnored() - { - using var fixture = new EmptyRepositoryFixture(); - var objectId = fixture.Repository.MakeACommit(); - var commit = Substitute.For(); - commit.Sha.Returns(objectId.Sha); - commit.When.Returns(DateTimeOffset.Now); - - var config = new ConfigurationBuilder() - .Add(new Config - { - Ignore = new IgnoreConfig - { - Before = commit.When.AddMinutes(1) - } - }).Build(); - - fixture.AssertFullSemver("0.1.0+0", config); - } -} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/IgnoreCommitScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/IgnoreCommitScenarios.cs new file mode 100644 index 0000000000..0ab82ba0e8 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/IgnoreCommitScenarios.cs @@ -0,0 +1,334 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; + +namespace GitVersion.Core.Tests.IntegrationTests; + +[TestFixture] +public class IgnoreCommitScenarios : TestBase +{ + [Test] + public void ShouldThrowGitVersionExceptionWhenAllCommitsAreIgnored() + { + using var fixture = new EmptyRepositoryFixture(); + var dateTimeNow = DateTimeOffset.Now; + fixture.MakeACommit(); + + var configuration = GitFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration { Before = dateTimeNow.AddYears(1) }).Build(); + + Should.Throw(() => fixture.GetVersion(configuration)) + .Message.ShouldBe("No commits found on the current branch."); + } + + [TestCase(null, "0.0.1-1")] + [TestCase("0.0.1", "0.0.1-1")] + [TestCase("0.1.0", "0.1.0-1")] + [TestCase("1.0.0", "1.0.0-1")] + public void ShouldNotFallbackToBaseVersionWhenAllCommitsAreNotIgnored(string? nextVersion, string expectedFullSemVer) + { + using var fixture = new EmptyRepositoryFixture(); + var dateTimeNow = DateTimeOffset.Now; + fixture.MakeACommit(); + + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion(nextVersion) + .WithIgnoreConfiguration(new IgnoreConfiguration { Before = dateTimeNow.AddYears(-1) }).Build(); + + fixture.AssertFullSemver(expectedFullSemVer, configuration); + } + + [Test] + public void GivenTrunkBasedWorkflowWithCommitParameterThenVersionShouldBeCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + var commitB = fixture.Repository.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MakeACommit("D"); + + var configuration = TrunkBasedConfigurationBuilder.New.Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2", configuration, commitId: commitB.Sha); + } + + [Test] + public void GivenTrunkBasedWorkflowWithIgnoreConfigurationForCommitThenVersionShouldBeCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + var commitB = fixture.Repository.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MakeACommit("D"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitB.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", configuration); + } + + [Test] + public void GivenTrunkBasedWorkflowWithIgnoreConfigurationForCommitBAndCommitParameterAThenVersionShouldBeCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + var commitB = fixture.Repository.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + fixture.MakeACommit("D"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitB.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2", configuration, commitId: commitC.Sha); + } + + [Test] + public void GivenTrunkBasedWorkflowWithIgnoreConfigurationForCommitCAndCommitParameterCThenCommitBShouldBeUsed() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitC.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.2", configuration, commitId: commitC.Sha); + } + + [Test] + public void GivenTrunkBasedWorkflowWithIgnoreConfigurationForTaggedCommitThenTagShouldBeIgnored() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("D"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitC.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.3", configuration); + } + + [Test] + public void GivenTrunkBasedWorkflowWithIgnoreConfigurationBeforeCommitWithTagThenTagShouldBeIgnored() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("D"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Before = commitC.Committer.When }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1", configuration); + } + + [TestCase(false, "1.0.1-0")] + [TestCase(true, "1.0.0")] + public void GivenTrunkBasedWorkflowWithIgnoreConfigurationOfCommitBThenTagShouldBeConsidered( + bool preventIncrementWhenCurrentCommitTagged, string semanticVersion) + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("1.0.0"); + var commitB = fixture.Repository.MakeACommit("B"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitB.Sha] }) + .WithBranch("main", b => b.WithIncrement(IncrementStrategy.Patch) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + .WithDeploymentMode(GitVersion.VersionCalculation.DeploymentMode.ContinuousDelivery) + ).Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver(semanticVersion, configuration); + } + + [TestCase(false, "1.0.1-0")] + [TestCase(true, "1.0.0")] + public void GivenTrunkBasedWorkflowWithCommitParameterBThenTagShouldBeConsidered( + bool preventIncrementWhenCurrentCommitTagged, string semanticVersion) + { + using var fixture = new EmptyRepositoryFixture(); + + var commitA = fixture.Repository.MakeACommit("A"); + fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + var configuration = TrunkBasedConfigurationBuilder.New + .WithBranch("main", b => b.WithIncrement(IncrementStrategy.Patch) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + .WithDeploymentMode(GitVersion.VersionCalculation.DeploymentMode.ContinuousDelivery) + ).Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver(semanticVersion, configuration, commitId: commitA.Sha); + } + + [Test] + public void GivenGitHubFlowBasedWorkflowWithCommitParameterThenVersionShouldBeCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + var commitB = fixture.Repository.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MakeACommit("D"); + + var configuration = GitHubFlowConfigurationBuilder.New.Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2", configuration, commitId: commitB.Sha); + } + + [Test] + public void GivenGitHubFlowWorkflowWithIgnoreConfigurationForCommitThenVersionShouldBeCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + var commitB = fixture.Repository.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MakeACommit("D"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitB.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-3", configuration); + } + + [Test] + public void GivenGitHubFlowWorkflowWithIgnoreConfigurationForCommitBAndCommitParameterAThenVersionShouldBeCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + var commitB = fixture.Repository.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + fixture.MakeACommit("D"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitB.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2", configuration, commitId: commitC.Sha); + } + + [Test] + public void GivenGitHubFlowWorkflowWithIgnoreConfigurationForCommitCAndCommitParameterCThenCommitBShouldBeUsed() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitC.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-2", configuration, commitId: commitC.Sha); + } + + [Test] + public void GivenGitHubFlowWorkflowWithIgnoreConfigurationForTaggedCommitThenTagShouldBeIgnored() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("D"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitC.Sha] }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-3", configuration); + } + + [Test] + public void GivenGitHubFlowWorkflowWithIgnoreConfigurationBeforeCommitWithTagThenTagShouldBeIgnored() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + var commitC = fixture.Repository.MakeACommit("C"); + fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("D"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Before = commitC.Committer.When }) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1", configuration); + } + + [TestCase(false, "1.0.1-0")] + [TestCase(true, "1.0.0")] + public void GivenGitHubFlowWorkflowWithIgnoreConfigurationOfCommitBThenTagShouldBeConsidered( + bool preventIncrementWhenCurrentCommitTagged, string semanticVersion) + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("1.0.0"); + var commitB = fixture.Repository.MakeACommit("B"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithIgnoreConfiguration(new IgnoreConfiguration() { Shas = [commitB.Sha] }) + .WithBranch("main", b => b.WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged)) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver(semanticVersion, configuration); + } + + [TestCase(false, "1.0.1-0")] + [TestCase(true, "1.0.0")] + public void GivenGitHubFlowWorkflowWithCommitParameterBThenTagShouldBeConsidered( + bool preventIncrementWhenCurrentCommitTagged, string semanticVersion) + { + using var fixture = new EmptyRepositoryFixture(); + + var commitA = fixture.Repository.MakeACommit("A"); + fixture.ApplyTag("1.0.0"); + fixture.MakeACommit("B"); + + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", b => b.WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged)) + .Build(); + + // ✅ succeeds as expected + fixture.AssertFullSemver(semanticVersion, configuration, commitId: commitA.Sha); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/MainScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/MainScenarios.cs index 4b53420583..709263c825 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/MainScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/MainScenarios.cs @@ -1,55 +1,52 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; [TestFixture] public class MainScenarios : TestBase { + [Test] + public void CanHandleManualDeployment() + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch(MainBranch, builder => builder.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.Repository.MakeATaggedCommit("1.0.0"); + fixture.Repository.MakeCommits(2); + fixture.AssertFullSemver("1.0.1-1+2", configuration); + } + [Test] public void CanHandleContinuousDelivery() { - var config = new Config - { - Branches = - { - { - MainBranch, new BranchConfig - { - VersioningMode = VersioningMode.ContinuousDelivery - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder + .WithLabel("ci").WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("1.0.1+2", config); + fixture.AssertFullSemver("1.0.1-ci.2", configuration); } [Test] public void CanHandleContinuousDeployment() { - var config = new Config - { - Branches = - { - { - MainBranch, new BranchConfig - { - VersioningMode = VersioningMode.ContinuousDeployment - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder + .WithLabel("ci").WithDeploymentMode(DeploymentMode.ContinuousDeployment)) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("1.0.1-ci.2", config); + fixture.AssertFullSemver("1.0.1", configuration); } [Test] @@ -62,7 +59,7 @@ public void GivenARepositoryWithCommitsButNoTagsVersionShouldBe01() fixture.Repository.MakeACommit(); // When - fixture.AssertFullSemver("0.1.0+2"); + fixture.AssertFullSemver("0.0.1-3"); } [Test] @@ -76,7 +73,7 @@ public void GivenARepositoryWithCommitsButBadTagsVersionShouldBe01() fixture.Repository.MakeACommit(); // When - fixture.AssertFullSemver("0.1.0+2"); + fixture.AssertFullSemver("0.0.1-3"); } [Test] @@ -84,39 +81,79 @@ public void GivenARepositoryWithCommitsButNoTagsWithDetachedHeadVersionShouldBe0 { using var fixture = new EmptyRepositoryFixture(); // Given - fixture.Repository.MakeACommit(); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeACommit(); + fixture.Repository.MakeACommit("one"); + fixture.Repository.MakeACommit("two"); + fixture.Repository.MakeACommit("three"); var commit = fixture.Repository.Head.Tip; fixture.Repository.MakeACommit(); Commands.Checkout(fixture.Repository, commit); // When - fixture.AssertFullSemver("0.1.0+2", onlyTrackedBranches: false); + fixture.AssertFullSemver("0.0.1-3", onlyTrackedBranches: false); } [Test] public void GivenARepositoryWithTagAndNextVersionInConfigVersionShouldMatchVersionTxtFile() { const string expectedNextVersion = "1.1.0"; - var config = new Config { NextVersion = expectedNextVersion }; + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion(expectedNextVersion).Build(); using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.1.0+5", config); + fixture.AssertFullSemver("1.1.0-5", configuration); } [Test] public void GivenARepositoryWithTagAndANextVersionTxtFileAndNoCommitsVersionShouldBeTag() { + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("1.1.0").Build(); + using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.AssertFullSemver("1.0.3"); + fixture.AssertFullSemver("1.0.3", configuration); + } - fixture.AssertFullSemver("1.0.3", new Config { NextVersion = "1.1.0" }); + [Test] + public void GivenARepositoryWithTagAndANextVersionTxtFileAndNoCommitsVersionShouldBeTag2() + { + using var fixture = new EmptyRepositoryFixture(); + const string taggedVersion = "1.0.3"; + fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.Repository.MakeACommit(); + fixture.AssertFullSemver("1.0.4-1"); + + // I'm not sure if the postfix +1 is correct here... + // but the next version configuration property is something for the user to manipulate the resulting version. + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("1.1.0").Build(); + fixture.AssertFullSemver("1.1.0-1", configuration); + } + + [Test] + public void GivenARepositoryWithTagAndANextVersionTxtFileAndNoCommitsVersionShouldBeTag3() + { + using var fixture = new EmptyRepositoryFixture(); + const string taggedVersion = "1.0.3"; + fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.AssertFullSemver("1.0.3"); + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("1.0.2").Build(); + fixture.AssertFullSemver("1.0.3", configuration); + } + + [Test] + public void GivenARepositoryWithTagAndANextVersionTxtFileAndNoCommitsVersionShouldBeTag4() + { + using var fixture = new EmptyRepositoryFixture(); + const string taggedVersion = "1.0.3"; + fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.Repository.MakeACommit(); + fixture.AssertFullSemver("1.0.4-1"); + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("1.0.4").Build(); + fixture.AssertFullSemver("1.0.4-1", configuration); } [Test] @@ -127,7 +164,7 @@ public void GivenARepositoryWithTagAndNoNextVersionTxtFileVersionShouldBeTagWith fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.0.4+5"); + fixture.AssertFullSemver("1.0.4-5"); } [Test] @@ -135,7 +172,7 @@ public void GivenARepositoryWithTagAndNoNextVersionTxtFileAndNoCommitsVersionSho { using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.0.3"; - fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.MakeATaggedCommit(taggedVersion); fixture.AssertFullSemver("1.0.3"); } @@ -145,10 +182,11 @@ public void GivenARepositoryWithTagAndOldNextVersionConfigVersionShouldBeTagWith { using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.1.0"; - fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.1.1+5", new Config { NextVersion = "1.0.0" }); + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("1.0.0").Build(); + fixture.AssertFullSemver("1.1.1-5", configuration); } [Test] @@ -158,7 +196,8 @@ public void GivenARepositoryWithTagAndOldNextVersionConfigAndNoCommitsVersionSho const string taggedVersion = "1.1.0"; fixture.Repository.MakeATaggedCommit(taggedVersion); - fixture.AssertFullSemver("1.1.0", new Config { NextVersion = "1.0.0" }); + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("1.0.0").Build(); + fixture.AssertFullSemver("1.1.0", configuration); } [Test] @@ -169,41 +208,214 @@ public void CanSpecifyTagPrefixes() fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.0.4+5", new Config { TagPrefix = "version-" }); + var configuration = GitFlowConfigurationBuilder.New.WithTagPrefix("version-").Build(); + fixture.AssertFullSemver("1.0.4-5", configuration); } [Test] public void CanSpecifyTagPrefixesAsRegex() { - var config = new Config { TagPrefix = "version-|[vV]" }; + var configuration = GitFlowConfigurationBuilder.New.WithTagPrefix($"version-|{ConfigurationConstants.DefaultTagPrefix}").Build(); using var fixture = new EmptyRepositoryFixture(); var taggedVersion = "v1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.0.4+5", config); + fixture.AssertFullSemver("1.0.4-5", configuration); taggedVersion = "version-1.0.5"; fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("1.0.6+5", config); + fixture.AssertFullSemver("1.0.6-5", configuration); } [Test] public void AreTagsNotAdheringToTagPrefixIgnored() { - var config = new Config { TagPrefix = "" }; + var configuration = GitFlowConfigurationBuilder.New.WithTagPrefix("").Build(); using var fixture = new EmptyRepositoryFixture(); var taggedVersion = "version-1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.AssertFullSemver("0.1.0+5", config); //Fallback version + 5 commits since tag + fixture.AssertFullSemver("0.0.1-6", configuration); taggedVersion = "bad/1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); - fixture.AssertFullSemver("0.1.0+6", config); //Fallback version + 6 commits since tag + fixture.AssertFullSemver("0.0.1-7", configuration); + } + + [Test] + public void NextVersionShouldBeConsideredOnTheDevelopmentBranch() + { + using var fixture = new EmptyRepositoryFixture("develop"); + + var configurationBuilder = GitFlowConfigurationBuilder.New; + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.1", configurationBuilder.Build()); + + configurationBuilder.WithNextVersion("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-alpha.1", configurationBuilder.Build()); + + fixture.MakeACommit(); + configurationBuilder.WithNextVersion(null); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-alpha.2", configurationBuilder.Build()); + + configurationBuilder.WithNextVersion("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-alpha.2", configurationBuilder.Build()); + } + + /// + /// Prevent decrementation of versions on the develop branch #3177 + /// (see https://github.com/GitTools/GitVersion/discussions/3177) + /// + [Test] + public void PreventDecrementationOfVersionsOnTheDevelopmentBranch() + { + using var fixture = new EmptyRepositoryFixture("develop"); + + var configurationBuilder = GitFlowConfigurationBuilder.New; + + configurationBuilder.WithNextVersion("1.0.0"); + fixture.MakeACommit(); + + // now we are ready to start with the preparation of the 1.0.0 release + fixture.BranchTo("release/1.0.0"); + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configurationBuilder.Build()); + + fixture.Checkout("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+1", configurationBuilder.Build()); + + // make another commit on release/1.0.0 to prepare the actual beta1 release + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.1+2", configurationBuilder.Build()); + + // now we make changes on develop that may or may not end up in the 1.0.0 release + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configurationBuilder.Build()); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configurationBuilder.Build()); + + // now we do the actual release of beta 1 + fixture.Checkout("release/1.0.0"); + fixture.ApplyTag("1.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+0", configurationBuilder.Build()); + + // continue with more work on develop that may or may not end up in the 1.0.0 release + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1", configurationBuilder.Build()); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.2", configurationBuilder.Build()); + + // now we decide that the new on develop should be part of the beta 2 release, + // so we merge it into release/1.0.0 with --no-ff because it is a protected branch, + // but we don't do the release of beta 2 just yet + fixture.Checkout("release/1.0.0"); + fixture.MergeNoFF("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.2+3", configurationBuilder.Build()); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configurationBuilder.Build()); + + fixture.Checkout("release/1.0.0"); + fixture.ApplyTag("1.0.0-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-beta.3+0", configurationBuilder.Build()); + + fixture.Checkout("develop"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.0", configurationBuilder.Build()); + + fixture.MergeNoFF("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.3", configurationBuilder.Build()); + + fixture.Repository.Branches.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.6", configurationBuilder.Build()); + + fixture.Repository.Tags.Remove("1.0.0-beta.1"); + fixture.Repository.Tags.Remove("1.0.0-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.6", configurationBuilder.Build()); + + configurationBuilder.WithNextVersion("1.1.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.6", configurationBuilder.Build()); + } + + [TestCase(true, "1.1.0-4")] + [TestCase(false, "1.0.1-4")] + public void TrackMergeMessageShouldBeConsideredOnTheMainBranch(bool trackMergeMessage, string expectedSemanticVersion) + { + using var fixture = new EmptyRepositoryFixture(); + + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder.WithTrackMergeMessage(trackMergeMessage)) + .Build(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("release/1.1.0"); + fixture.MakeACommit(); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+2", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1", configuration); + + fixture.MergeNoFF("release/1.1.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver(expectedSemanticVersion, configuration); + + fixture.Remove("release/1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver(expectedSemanticVersion, configuration); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs b/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentScenarios.cs similarity index 55% rename from src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs rename to src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentScenarios.cs index 202820d0e8..8ba8ab429f 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentMode.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/MainlineDevelopmentScenarios.cs @@ -1,59 +1,68 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; -using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; -public class MainlineDevelopmentMode : TestBase +public class MainlineDevelopmentScenarios : TestBase { - private readonly Config config = new() { VersioningMode = VersioningMode.Mainline }; - - [Test] - public void VerifyNonMainMainlineVersionIdenticalAsMain() - { - using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit("1"); - - fixture.BranchTo("feature/foo", "foo"); - fixture.MakeACommit("2 +semver: major"); - fixture.Checkout(MainBranch); - fixture.MergeNoFF("feature/foo"); - - fixture.AssertFullSemver("1.0.0", this.config); - - fixture.BranchTo("support/1.0", "support"); - - fixture.AssertFullSemver("1.0.0", this.config); - } + private static GitFlowConfigurationBuilder GetConfigurationBuilder() => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", builder => builder + .WithIsMainBranch(true).WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ContinuousDeployment) + .WithSourceBranches() + ) + .WithBranch("develop", builder => builder + .WithIsMainBranch(false).WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithSourceBranches("main") + ) + .WithBranch("feature", builder => builder + .WithIsMainBranch(false).WithIncrement(IncrementStrategy.Minor) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithSourceBranches("main") + ) + .WithBranch("hotfix", builder => builder + .WithIsMainBranch(false).WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithRegularExpression("^hotfix[/-](?.+)").WithLabel("{BranchName}") + .WithSourceBranches("main") + ) + .WithBranch("pull-request", builder => builder + .WithIsMainBranch(false).WithIncrement(IncrementStrategy.Inherit) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithSourceBranches("main") + ); [Test] public void MergedFeatureBranchesToMainImpliesRelease() { + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("1"); fixture.MakeATaggedCommit("1.0.0"); fixture.BranchTo("feature/foo", "foo"); fixture.MakeACommit("2"); - fixture.AssertFullSemver("1.0.1-foo.1", this.config); + fixture.AssertFullSemver("1.0.1-foo.1", configuration); fixture.MakeACommit("2.1"); - fixture.AssertFullSemver("1.0.1-foo.2", this.config); + fixture.AssertFullSemver("1.0.1-foo.2", configuration); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.0.1", this.config); + fixture.AssertFullSemver("1.0.1", configuration); fixture.BranchTo("feature/foo2", "foo2"); fixture.MakeACommit("3 +semver: minor"); - fixture.AssertFullSemver("1.1.0-foo2.1", this.config); + fixture.AssertFullSemver("1.1.0-foo2.1", configuration); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo2"); - fixture.AssertFullSemver("1.1.0", this.config); + fixture.AssertFullSemver("1.1.0", configuration); fixture.BranchTo("feature/foo3", "foo3"); fixture.MakeACommit("4"); @@ -62,94 +71,97 @@ public void MergedFeatureBranchesToMainImpliesRelease() fixture.SequenceDiagram.NoteOver("Merge message contains '+semver: minor'", MainBranch); var commit = fixture.Repository.Head.Tip; // Put semver increment in merge message - fixture.Repository.Commit(commit.Message + " +semver: minor", commit.Author, commit.Committer, new CommitOptions { AmendPreviousCommit = true }); - fixture.AssertFullSemver("1.2.0", this.config); + fixture.Repository.Commit(commit.Message + " +semver: minor", commit.Author, commit.Committer, new() { AmendPreviousCommit = true }); + fixture.AssertFullSemver("1.2.0", configuration); fixture.BranchTo("feature/foo4", "foo4"); fixture.MakeACommit("5 +semver: major"); - fixture.AssertFullSemver("2.0.0-foo4.1", this.config); + fixture.AssertFullSemver("2.0.0-foo4.1", configuration); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo4"); - fixture.AssertFullSemver("2.0.0", this.config); + fixture.AssertFullSemver("2.0.0", configuration); // We should evaluate any commits not included in merge commit calculations for direct commit/push or squash to merge commits fixture.MakeACommit("6 +semver: major"); - fixture.AssertFullSemver("3.0.0", this.config); + fixture.AssertFullSemver("3.0.0", configuration); fixture.MakeACommit("7 +semver: minor"); - fixture.AssertFullSemver("3.1.0", this.config); + fixture.AssertFullSemver("3.1.0", configuration); fixture.MakeACommit("8"); - fixture.AssertFullSemver("3.1.1", this.config); + fixture.AssertFullSemver("3.1.1", configuration); // Finally verify that the merge commits still function properly fixture.BranchTo("feature/foo5", "foo5"); fixture.MakeACommit("9 +semver: minor"); - fixture.AssertFullSemver("3.2.0-foo5.1", this.config); + fixture.AssertFullSemver("3.2.0-foo5.1", configuration); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo5"); - fixture.AssertFullSemver("3.2.0", this.config); + fixture.AssertFullSemver("3.2.0", configuration); // One more direct commit for good measure fixture.MakeACommit("10 +semver: minor"); - fixture.AssertFullSemver("3.3.0", this.config); + fixture.AssertFullSemver("3.3.0", configuration); // And we can commit without bumping semver fixture.MakeACommit("11 +semver: none"); - fixture.AssertFullSemver("3.3.0", this.config); + fixture.AssertFullSemver("3.3.1", configuration); Console.WriteLine(fixture.SequenceDiagram.GetDiagram()); } [Test] - public void VerifyPullRequestsActLikeContinuousDelivery() + public void VerifyPullRequestsActLikeContinuousDeliveryOnFeatureBranch() { + var configuration = GetConfigurationBuilder().Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit("1"); + + fixture.MakeACommit("1"); + + fixture.AssertFullSemver("0.0.1", configuration); + fixture.MakeATaggedCommit("1.0.0"); - fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.1", this.config); + fixture.MakeACommit("2"); + + fixture.AssertFullSemver("1.0.1", configuration); fixture.BranchTo("feature/foo", "foo"); - fixture.AssertFullSemver("1.0.2-foo.0", this.config); - fixture.MakeACommit(); - fixture.MakeACommit(); - fixture.Repository.CreatePullRequestRef("feature/foo", MainBranch, normalise: true, prNumber: 8); - fixture.AssertFullSemver("1.0.2-PullRequest0008.3", this.config); + fixture.AssertFullSemver("1.1.0-foo.0", configuration); + fixture.MakeACommit("3"); + fixture.MakeACommit("4"); + fixture.Repository.CreatePullRequestRef("feature/foo", MainBranch, prNumber: 8, normalise: true); + fixture.AssertFullSemver("1.1.0-PullRequest8.3", configuration); } [Test] - public void SupportBranches() + public void VerifyPullRequestsActLikeContinuousDeliveryOnHotfixBranch() { + var configuration = GetConfigurationBuilder().Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit("1"); + + fixture.MakeACommit("1"); + + fixture.AssertFullSemver("0.0.1", configuration); + fixture.MakeATaggedCommit("1.0.0"); - fixture.MakeACommit(); // 1.0.1 - fixture.MakeACommit(); // 1.0.2 - fixture.AssertFullSemver("1.0.2", this.config); + fixture.MakeACommit("2"); - fixture.BranchTo("support/1.0", "support10"); - fixture.AssertFullSemver("1.0.2", this.config); + fixture.AssertFullSemver("1.0.1", configuration); - // Move main on - fixture.Checkout(MainBranch); - fixture.MakeACommit("+semver: major"); // 2.0.0 (on main) - fixture.AssertFullSemver("2.0.0", this.config); - - // Continue on support/1.0 - fixture.Checkout("support/1.0"); - fixture.MakeACommit(); // 1.0.3 - fixture.MakeACommit(); // 1.0.4 - fixture.AssertFullSemver("1.0.4", this.config); - fixture.BranchTo("feature/foo", "foo"); - fixture.AssertFullSemver("1.0.5-foo.0", this.config); - fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.5-foo.1", this.config); - fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.5-foo.2", this.config); - fixture.Repository.CreatePullRequestRef("feature/foo", "support/1.0", normalise: true, prNumber: 7); - fixture.AssertFullSemver("1.0.5-PullRequest0007.3", this.config); + fixture.BranchTo("hotfix/foo", "foo"); + fixture.AssertFullSemver("1.0.2-foo.0", configuration); + fixture.MakeACommit("3"); + fixture.MakeACommit("4"); + fixture.Repository.CreatePullRequestRef("hotfix/foo", MainBranch, prNumber: 8, normalise: true); + fixture.AssertFullSemver("1.0.2-PullRequest8.3", configuration); } [Test] public void VerifyForwardMerge() { + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("1"); fixture.MakeATaggedCommit("1.0.0"); @@ -157,53 +169,27 @@ public void VerifyForwardMerge() fixture.BranchTo("feature/foo", "foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.2-foo.1", this.config); + fixture.AssertFullSemver("1.0.2-foo.1", configuration); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.2-foo.2", this.config); + fixture.AssertFullSemver("1.0.2-foo.2", configuration); fixture.Checkout(MainBranch); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.2", this.config); + fixture.AssertFullSemver("1.0.2", configuration); fixture.Checkout("feature/foo"); // This may seem surprising, but this happens because we branched off mainline // and incremented. Mainline has then moved on. We do not follow mainline // in feature branches, you need to merge mainline in to get the mainline version - fixture.AssertFullSemver("1.0.2-foo.2", this.config); + fixture.AssertFullSemver("1.0.2-foo.2", configuration); fixture.MergeNoFF(MainBranch); - fixture.AssertFullSemver("1.0.3-foo.3", this.config); - } - - [Test] - public void VerifySupportForwardMerge() - { - using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit("1"); - fixture.MakeATaggedCommit("1.0.0"); - fixture.MakeACommit(); // 1.0.1 - - fixture.BranchTo("support/1.0", "support10"); - fixture.MakeACommit(); - fixture.MakeACommit(); - - fixture.Checkout(MainBranch); - fixture.MakeACommit("+semver: minor"); - fixture.AssertFullSemver("1.1.0", this.config); - fixture.MergeNoFF("support/1.0"); - fixture.AssertFullSemver("1.1.1", this.config); - fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.2", this.config); - fixture.Checkout("support/1.0"); - fixture.AssertFullSemver("1.0.3", this.config); - - fixture.BranchTo("feature/foo", "foo"); - fixture.MakeACommit(); - fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.4-foo.2", this.config); // TODO This probably should be 1.0.5 + fixture.AssertFullSemver("1.0.3-foo.3", configuration); } [Test] public void VerifyDevelopTracksMainVersion() { + var configuration = GetConfigurationBuilder().Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("1"); fixture.MakeATaggedCommit("1.0.0"); @@ -211,36 +197,40 @@ public void VerifyDevelopTracksMainVersion() // branching increments the version fixture.BranchTo("develop"); - fixture.AssertFullSemver("1.1.0-alpha.0", this.config); + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.0-alpha.1", this.config); + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); // merging develop into main increments minor version on main fixture.Checkout(MainBranch); fixture.MergeNoFF("develop"); - fixture.AssertFullSemver("1.1.0", this.config); + fixture.AssertFullSemver("1.1.0", configuration); // a commit on develop before the merge still has the same version number fixture.Checkout("develop"); - fixture.AssertFullSemver("1.1.0-alpha.1", this.config); + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); // moving on to further work on develop tracks main's version from the merge fixture.MakeACommit(); - fixture.AssertFullSemver("1.2.0-alpha.1", this.config); + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); // adding a commit to main increments patch fixture.Checkout(MainBranch); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.1", this.config); + fixture.AssertFullSemver("1.1.1", configuration); - // adding a commit to main doesn't change develop's version + // adding a commit to main doesn't change develop 's version fixture.Checkout("develop"); - fixture.AssertFullSemver("1.2.0-alpha.1", this.config); + fixture.AssertFullSemver("1.1.0-alpha.2", configuration); } [Test] public void VerifyDevelopFeatureTracksMainVersion() { + var configuration = GetConfigurationBuilder().WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("1"); fixture.MakeATaggedCommit("1.0.0"); @@ -248,46 +238,51 @@ public void VerifyDevelopFeatureTracksMainVersion() // branching increments the version fixture.BranchTo("develop"); - fixture.AssertFullSemver("1.1.0-alpha.0", this.config); + fixture.AssertFullSemver("1.1.0-alpha.0", configuration); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.0-alpha.1", this.config); + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); // merging develop into main increments minor version on main fixture.Checkout(MainBranch); fixture.MergeNoFF("develop"); - fixture.AssertFullSemver("1.1.0", this.config); + fixture.AssertFullSemver("1.1.0", configuration); // a commit on develop before the merge still has the same version number fixture.Checkout("develop"); - fixture.AssertFullSemver("1.1.0-alpha.1", this.config); + fixture.AssertFullSemver("1.1.0-alpha.1", configuration); // a branch from develop before the merge tracks the pre-merge version from main // (note: the commit on develop looks like a commit to this branch, thus the .1) fixture.BranchTo("feature/foo"); - fixture.AssertFullSemver("1.0.2-foo.1", this.config); + fixture.AssertFullSemver("1.1.0-foo.1", configuration); // further work on the branch tracks the merged version from main fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.1-foo.1", this.config); + fixture.AssertFullSemver("1.1.0-foo.2", configuration); // adding a commit to main increments patch fixture.Checkout(MainBranch); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.1", this.config); + fixture.AssertFullSemver("1.1.1", configuration); // adding a commit to main doesn't change the feature's version fixture.Checkout("feature/foo"); - fixture.AssertFullSemver("1.1.1-foo.1", this.config); + fixture.AssertFullSemver("1.1.0-foo.2", configuration); // merging the feature to develop increments develop fixture.Checkout("develop"); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.2.0-alpha.2", this.config); + fixture.AssertFullSemver("1.1.0-alpha.3", configuration); } [Test] public void VerifyMergingMainToFeatureDoesNotCauseBranchCommitsToIncrementVersion() { + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit($"first in {MainBranch}"); @@ -305,12 +300,17 @@ public void VerifyMergingMainToFeatureDoesNotCauseBranchCommitsToIncrementVersio fixture.MakeATaggedCommit("1.0.0"); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.0.1", this.config); + fixture.AssertFullSemver("1.0.1", configuration); } [Test] public void VerifyMergingMainToFeatureDoesNotStopMainCommitsIncrementingVersion() { + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit($"first in {MainBranch}"); @@ -327,14 +327,20 @@ public void VerifyMergingMainToFeatureDoesNotStopMainCommitsIncrementingVersion( fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.0.2", this.config); + fixture.AssertFullSemver("1.0.2", configuration); } [Test] public void VerifyIssue1154CanForwardMergeMainToFeatureBranch() { + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); + fixture.AssertFullSemver("0.0.1", configuration); fixture.BranchTo("feature/branch2"); fixture.BranchTo("feature/branch1"); fixture.MakeACommit(); @@ -342,7 +348,7 @@ public void VerifyIssue1154CanForwardMergeMainToFeatureBranch() fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/branch1"); - fixture.AssertFullSemver("0.1.1", this.config); + fixture.AssertFullSemver("0.0.2", configuration); fixture.Checkout("feature/branch2"); fixture.MakeACommit(); @@ -350,12 +356,17 @@ public void VerifyIssue1154CanForwardMergeMainToFeatureBranch() fixture.MakeACommit(); fixture.MergeNoFF(MainBranch); - fixture.AssertFullSemver("0.1.2-branch2.4", this.config); + fixture.AssertFullSemver("0.0.3-branch2.4", configuration); } [Test] public void VerifyMergingMainIntoAFeatureBranchWorksWithMultipleBranches() { + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithIncrement(IncrementStrategy.Patch) + ).Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit($"first in {MainBranch}"); @@ -381,49 +392,55 @@ public void VerifyMergingMainIntoAFeatureBranchWorksWithMultipleBranches() fixture.MergeNoFF("feature/foo"); fixture.MergeNoFF("feature/bar"); - fixture.AssertFullSemver("1.0.2", this.config); + fixture.AssertFullSemver("1.0.2", configuration); } [Test] public void MergingFeatureBranchThatIncrementsMinorNumberIncrementsMinorVersionOfMain() { - var currentConfig = new Config { VersioningMode = VersioningMode.Mainline, Branches = new Dictionary { { "feature", new BranchConfig { VersioningMode = VersioningMode.ContinuousDeployment, Increment = IncrementStrategy.Minor } } } }; + var configuration = GetConfigurationBuilder() + .WithBranch("feature", builder => builder + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithIncrement(IncrementStrategy.Minor) + ) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit($"first in {MainBranch}"); fixture.MakeATaggedCommit("1.0.0"); - fixture.AssertFullSemver("1.0.0", currentConfig); + fixture.AssertFullSemver("1.0.0", configuration); fixture.BranchTo("feature/foo", "foo"); fixture.MakeACommit("first in foo"); fixture.MakeACommit("second in foo"); - fixture.AssertFullSemver("1.1.0-foo.2", currentConfig); + fixture.AssertFullSemver("1.1.0-foo.2", configuration); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.1.0", currentConfig); + fixture.AssertFullSemver("1.1.0", configuration); } [Test] public void VerifyIncrementConfigIsHonoured() { - var minorIncrementConfig = new Config - { - VersioningMode = VersioningMode.Mainline, - Increment = IncrementStrategy.Minor, - Branches = new Dictionary - { - { MainBranch, new BranchConfig { Increment = IncrementStrategy.Minor, Name = MainBranch, Regex = MainBranch } }, - { "feature", new BranchConfig { Increment = IncrementStrategy.Minor, Name = "feature", Regex = "features?[/-]" } } - } - }; + var minorIncrementConfig = GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", builder => builder + .WithDeploymentMode(DeploymentMode.ContinuousDeployment) + .WithIncrement(IncrementStrategy.None) + ) + .WithBranch("feature", builder => builder + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithIncrement(IncrementStrategy.None) + ) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("1"); fixture.MakeATaggedCommit("1.0.0"); fixture.BranchTo("feature/foo", "foo"); - fixture.MakeACommit("2"); + fixture.MakeACommit("2 +semver: minor"); fixture.AssertFullSemver("1.1.0-foo.1", minorIncrementConfig); fixture.MakeACommit("2.1"); fixture.AssertFullSemver("1.1.0-foo.2", minorIncrementConfig); @@ -446,20 +463,21 @@ public void VerifyIncrementConfigIsHonoured() fixture.SequenceDiagram.NoteOver("Merge message contains '+semver: patch'", MainBranch); var commit = fixture.Repository.Head.Tip; // Put semver increment in merge message - fixture.Repository.Commit(commit.Message + " +semver: patch", commit.Author, commit.Committer, new CommitOptions { AmendPreviousCommit = true }); + fixture.Repository.Commit(commit.Message + " +semver: patch", commit.Author, commit.Committer, new() { AmendPreviousCommit = true }); fixture.AssertFullSemver("1.1.2", minorIncrementConfig); + var configuration = GetConfigurationBuilder().Build(); fixture.BranchTo("feature/foo4", "foo4"); fixture.MakeACommit("5 +semver: major"); fixture.AssertFullSemver("2.0.0-foo4.1", minorIncrementConfig); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo4"); - fixture.AssertFullSemver("2.0.0", this.config); + fixture.AssertFullSemver("2.0.0", configuration); // We should evaluate any commits not included in merge commit calculations for direct commit/push or squash to merge commits fixture.MakeACommit("6 +semver: major"); fixture.AssertFullSemver("3.0.0", minorIncrementConfig); - fixture.MakeACommit("7"); + fixture.MakeACommit("7 +semver: minor"); fixture.AssertFullSemver("3.1.0", minorIncrementConfig); fixture.MakeACommit("8 +semver: patch"); fixture.AssertFullSemver("3.1.1", minorIncrementConfig); @@ -484,66 +502,56 @@ public void VerifyIncrementConfigIsHonoured() [Test] public void BranchWithoutMergeBaseMainlineBranchIsFound() { - var currentConfig = new Config { VersioningMode = VersioningMode.Mainline, AssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatchTag }; + var configuration = GetConfigurationBuilder() + .WithBranch("unknown", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDelivery)) + .WithAssemblyFileVersioningScheme(AssemblyFileVersioningScheme.MajorMinorPatchTag) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("master")); + fixture.AssertFullSemver("0.0.1", configuration); + fixture.BranchTo("master"); fixture.Repository.Branches.Remove(fixture.Repository.Branches["main"]); + fixture.AssertFullSemver("0.0.1", configuration); fixture.Repository.MakeCommits(2); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("issue-branch")); + fixture.AssertFullSemver("0.0.3", configuration); + fixture.BranchTo("issue-branch"); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("0.1.3-issue-branch.1", currentConfig); + fixture.AssertFullSemver("0.0.4-issue-branch.1", configuration); } [Test] public void GivenARemoteGitRepositoryWithCommitsThenClonedLocalDevelopShouldMatchRemoteVersion() { + var configuration = GetConfigurationBuilder().Build(); + using var fixture = new RemoteRepositoryFixture(); - fixture.AssertFullSemver("0.1.4", config); + fixture.AssertFullSemver("0.0.5", configuration); // RemoteRepositoryFixture creates 5 commits. fixture.BranchTo("develop"); - fixture.AssertFullSemver("0.2.0-alpha.0", config); - Console.WriteLine(fixture.SequenceDiagram.GetDiagram()); + fixture.AssertFullSemver("0.1.0-alpha.0", configuration); + fixture.Repository.DumpGraph(); var local = fixture.CloneRepository(); - fixture.AssertFullSemver("0.2.0-alpha.0", config, repository: local.Repository); + fixture.AssertFullSemver("0.1.0-alpha.0", configuration, repository: local.Repository); local.Repository.DumpGraph(); } - [Test] - public void GivenNoMainThrowsWarning() + [TestCase("feat!: Break stuff +semver: none")] + [TestCase("feat: Add stuff +semver: none")] + [TestCase("fix: Fix stuff +semver: none")] + public void NoBumpMessageTakesPrecedenceOverBumpMessage(string commitMessage) { + // Same configuration as found here: https://gitversion.net/docs/reference/version-increments#conventional-commit-messages + var conventionalCommitsConfig = GetConfigurationBuilder() + .WithMajorVersionBumpMessage("^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)") + .WithMinorVersionBumpMessage("^(feat)(\\([\\w\\s-]*\\))?:") + .WithPatchVersionBumpMessage("^(build|chore|ci|docs|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?:") + .Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - fixture.Repository.Branches.Remove(fixture.Repository.Branches["main"]); + fixture.MakeATaggedCommit("1.0.0"); - var exception = Assert.Throws(() => fixture.AssertFullSemver("1.1.0-alpha.1", config)); - exception.ShouldNotBeNull(); - exception.Message.ShouldMatch("No branches can be found matching the commit .* in the configured Mainline branches: main, support"); - } -} + fixture.MakeACommit(commitMessage); -internal static class CommitExtensions -{ - public static void MakeACommit(this RepositoryFixtureBase fixture, string commitMsg) - { - fixture.Repository.MakeACommit(commitMsg); - var diagramBuilder = (StringBuilder?)typeof(SequenceDiagram) - .GetField("diagramBuilder", BindingFlags.Instance | BindingFlags.NonPublic) - ?.GetValue(fixture.SequenceDiagram); - - string? GetParticipant(string participant) => - (string?)typeof(SequenceDiagram).GetMethod("GetParticipant", BindingFlags.Instance | BindingFlags.NonPublic) - ?.Invoke(fixture.SequenceDiagram, - new object[] - { - participant - }); - - var participant = GetParticipant(fixture.Repository.Head.FriendlyName); - if (participant != null) - diagramBuilder?.AppendLineFormat("{0} -> {0}: Commit '{1}'", participant, commitMsg); + fixture.AssertFullSemver("1.0.1", conventionalCommitsConfig); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs index 0525ca66de..597ac26ba2 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/OtherBranchScenarios.cs @@ -1,26 +1,136 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; +using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; [TestFixture] public class OtherBranchScenarios : TestBase { + [TestCase("", "NotAVersion", "2.0.0-1", "1.9.0", "1.9.0", "1.9.1-1")] + [TestCase("", "1.5.0", "1.5.0", "1.9.0", "1.9.0", "1.9.1-1")] + [TestCase("prefix", "1.5.0", "2.0.0-1", "1.9.0", "2.0.0-1", "2.0.0-2")] + [TestCase("prefix", "1.5.0", "2.0.0-1", "prefix1.9.0", "1.9.0", "1.9.1-1")] + [TestCase("prefix", "prefix1.5.0", "1.5.0", "1.9.0", "1.5.0", "1.5.1-1")] + public void CanUseCommitMessagesToBumpVersion_TagsTakePriorityOnlyIfVersions( + string tagPrefix, + string firstTag, + string expectedAfterFirstTag, + string secondTag, + string expectedAfterSecondTag, + string expectedVersionAfterNewCommit) + { + var configuration = GitFlowConfigurationBuilder.New + .WithTagPrefix(tagPrefix) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + var repo = fixture.Repository; + + repo.MakeATaggedCommit($"{tagPrefix}1.0.0"); + repo.MakeACommit("+semver:major"); + fixture.AssertFullSemver("2.0.0-1", configuration); + + repo.ApplyTag(firstTag); + fixture.AssertFullSemver(expectedAfterFirstTag, configuration); + + repo.ApplyTag(secondTag); + fixture.AssertFullSemver(expectedAfterSecondTag, configuration); + + repo.MakeACommit(); + fixture.AssertFullSemver(expectedVersionAfterNewCommit, configuration); + } + + [TestCase("", null, "1.9.0-1", "2.0.0-1+1", ExpectedResult = "1.9.0-1")] + [TestCase("", "", "1.9.0-1", "2.0.0-1+1", ExpectedResult = "1.9.0-1")] + [TestCase("", "foo", "1.9.0-1", "2.0.0-foo.1+1", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase("", "bar", "1.9.0-1", "2.0.0-bar.1+1", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase("prefix", null, "1.9.0-1", "2.0.0-1+1", ExpectedResult = "2.0.0-1+1")] + [TestCase("prefix", "", "1.9.0-1", "2.0.0-1+1", ExpectedResult = "2.0.0-1+1")] + [TestCase("prefix", "foo", "1.9.0-1", "2.0.0-foo.1+1", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase("prefix", "bar", "1.9.0-1", "2.0.0-bar.1+1", ExpectedResult = "2.0.0-bar.1+1")] + + [TestCase("", null, "2.1.0-1", "2.0.0-1+1", ExpectedResult = "2.1.0-1")] + [TestCase("", "", "2.1.0-1", "2.0.0-1+1", ExpectedResult = "2.1.0-1")] + [TestCase("", "foo", "2.1.0-1", "2.0.0-foo.1+1", ExpectedResult = "2.1.0-foo.1+1")] + [TestCase("", "bar", "2.1.0-1", "2.0.0-bar.1+1", ExpectedResult = "2.1.0-bar.1+1")] + [TestCase("prefix", null, "2.1.0-1", "2.0.0-1+1", ExpectedResult = "2.0.0-1+1")] + [TestCase("prefix", "", "2.1.0-1", "2.0.0-1+1", ExpectedResult = "2.0.0-1+1")] + [TestCase("prefix", "foo", "2.1.0-1", "2.0.0-foo.1+1", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase("prefix", "bar", "2.1.0-1", "2.0.0-bar.1+1", ExpectedResult = "2.0.0-bar.1+1")] + public string WhenTaggingACommitAsPreRelease(string tagPrefix, string? label, string tag, string expectedVersion) + { + var configuration = GitFlowConfigurationBuilder.New.WithLabel(null).WithTagPrefix(tagPrefix) + .WithBranch("main", b => b.WithLabel(label).WithDeploymentMode(DeploymentMode.ManualDeployment)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit($"{tagPrefix}1.0.0"); + fixture.MakeACommit("+semver:major"); + fixture.AssertFullSemver(expectedVersion, configuration); + fixture.ApplyTag(tag); + + return fixture.GetVersion(configuration).FullSemVer; + } + + /// + /// https://github.com/GitTools/GitVersion/issues/2340 + /// + [Test] + public void ShouldOnlyConsiderTagsMatchingOfCurrentBranch() + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", builder => builder.WithLabel("snapshot")) + .WithBranch("release", builder => builder.WithLabel("rc")) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.MakeACommit(); + fixture.MakeATaggedCommit("0.1.2-snapshot.2"); + fixture.BranchTo("release/0.1.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.2-rc.1+3", configuration); + } + [Test] public void CanTakeVersionFromReleaseBranch() { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("release", b => b.WithLabel("{BranchName}").WithRegularExpression("(?.+)")) + .Build(); + using var fixture = new EmptyRepositoryFixture(); + const string taggedVersion = "1.0.3"; - fixture.Repository.MakeATaggedCommit(taggedVersion); + fixture.MakeATaggedCommit(taggedVersion); fixture.Repository.MakeCommits(5); - fixture.Repository.CreateBranch("release/beta-2.0.0"); - Commands.Checkout(fixture.Repository, "release/beta-2.0.0"); + fixture.BranchTo("release/2.0.0-LTS"); + fixture.MakeACommit(); + + fixture.AssertFullSemver("2.0.0-LTS.1+6", configuration); + } - fixture.AssertFullSemver("2.0.0-beta.1+0"); + [Test] + public void CanTakeVersionFromHotfixBranch() + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("hotfix", b => b.WithLabel("{BranchName}").WithRegularExpression("(?.+)")) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + const string taggedVersion = "1.0.3"; + fixture.MakeATaggedCommit(taggedVersion); + fixture.BranchTo("hotfix/1.0.5-LTS"); + fixture.MakeACommit(); + + fixture.AssertFullSemver("1.0.5-LTS.1+1", configuration); } [Test] @@ -39,43 +149,41 @@ public void BranchesWithIllegalCharsShouldNotBeUsedInVersionNames() [Test] public void ShouldNotGetVersionFromFeatureBranchIfNotMerged() { + // * 1c08923 54 minutes ago (HEAD -> develop) + // | * 03dd6d5 56 minutes ago (tag: 1.0.1-feature.1, feature) + // |/ + // * e2ff13b 58 minutes ago (tag: 1.0.0-unstable.0, main) + + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", builder => builder.WithTrackMergeTarget(false)) + .Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeATaggedCommit("1.0.0-unstable.0"); // initial commit in main - fixture.Repository.CreateBranch("feature"); - Commands.Checkout(fixture.Repository, "feature"); - fixture.Repository.MakeATaggedCommit("1.0.1-feature.1"); + fixture.MakeATaggedCommit("1.0.0-unstable.0"); // initial commit in main + + fixture.BranchTo("feature"); + fixture.MakeATaggedCommit("1.0.1-feature.1"); + fixture.Checkout(MainBranch); + fixture.BranchTo("develop"); + fixture.MakeACommit(); - Commands.Checkout(fixture.Repository, MainBranch); - fixture.Repository.CreateBranch("develop"); - Commands.Checkout(fixture.Repository, "develop"); - fixture.Repository.MakeACommit(); + fixture.AssertFullSemver("1.0.0-alpha.2", configuration); - var version = fixture.GetVersion(); - version.SemVer.ShouldBe("1.0.0-alpha.1"); + fixture.Repository.DumpGraph(); } [TestCase("alpha", "JIRA-123", "alpha")] - [TestCase("useBranchName", "JIRA-123", "JIRA-123")] - [TestCase("alpha.{BranchName}", "JIRA-123", "alpha.JIRA-123")] - public void TagIsBranchNameForBranchesWithoutPrefixedBranchName(string tag, string branchName, string preReleaseTagName) + [TestCase($"alpha.{ConfigurationConstants.BranchNamePlaceholder}", "JIRA-123", "alpha.JIRA-123")] + public void LabelIsBranchNameForBranchesWithoutPrefixedBranchName(string label, string branchName, string preReleaseTagName) { - var config = new Config - { - Branches = - { - { - "other", - new BranchConfig - { - Increment = IncrementStrategy.Patch, - Regex = ".*", - SourceBranches = new HashSet(), - Tag = tag - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("other", builder => builder + .WithIncrement(IncrementStrategy.Patch) + .WithRegularExpression("(?.+)") + .WithSourceBranches() + .WithLabel(label)) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.0"); @@ -83,7 +191,7 @@ public void TagIsBranchNameForBranchesWithoutPrefixedBranchName(string tag, stri Commands.Checkout(fixture.Repository, branchName); fixture.Repository.MakeCommits(5); - var expectedFullSemVer = $"1.0.1-{preReleaseTagName}.1+5"; - fixture.AssertFullSemver(expectedFullSemVer, config); + var expectedFullSemVer = $"1.0.1-{preReleaseTagName}.5"; + fixture.AssertFullSemver(expectedFullSemVer, configuration); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs index eb6c77a110..dce46a0eb6 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/OtherScenarios.cs @@ -1,10 +1,10 @@ using System.Globalization; -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; +using GitVersion.Extensions; using GitVersion.Helpers; +using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; @@ -18,26 +18,26 @@ public class OtherScenarios : TestBase public void DoNotBlowUpWhenMainAndDevelopPointAtSameCommit() { using var fixture = new RemoteRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); fixture.Repository.CreateBranch("develop"); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, [], new(), null); Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip); fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch); fixture.InitializeRepo(); - fixture.AssertFullSemver("1.0.1+1"); + fixture.AssertFullSemver("1.0.1-1"); } [Test] public void AllowNotHavingMain() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); + fixture.MakeACommit(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + fixture.BranchTo("develop"); fixture.Repository.Branches.Remove(fixture.Repository.Branches[MainBranch]); fixture.AssertFullSemver("1.1.0-alpha.1"); @@ -47,10 +47,10 @@ public void AllowNotHavingMain() public void AllowHavingVariantsStartingWithMaster() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("masterfix")); + fixture.MakeACommit(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + fixture.BranchTo("masterfix"); fixture.AssertFullSemver("1.0.1-masterfix.1+1"); } @@ -59,23 +59,22 @@ public void AllowHavingVariantsStartingWithMaster() public void AllowHavingMasterInsteadOfMain() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("master")); - fixture.Repository.Branches.Remove(fixture.Repository.Branches["main"]); + fixture.MakeACommit("one"); + fixture.BranchTo("develop"); + fixture.BranchTo("master"); + fixture.Repository.Branches.Remove("main"); - fixture.AssertFullSemver("0.1.0+0"); + fixture.AssertFullSemver("0.0.1-1"); } [Test] public void AllowHavingVariantsStartingWithMain() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("mainfix")); - + fixture.MakeACommit(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + fixture.BranchTo("mainfix"); fixture.AssertFullSemver("1.0.1-mainfix.1+1"); } @@ -83,14 +82,14 @@ public void AllowHavingVariantsStartingWithMain() public void DoNotBlowUpWhenDevelopAndFeatureBranchPointAtSameCommit() { using var fixture = new RemoteRepositoryFixture(); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.MakeACommit(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); fixture.Repository.CreateBranch("feature/someFeature"); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, [], new(), null); Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip); fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch); fixture.InitializeRepo(); @@ -104,7 +103,7 @@ public void DoNotBlowUpWhenDevelopAndFeatureBranchPointAtSameCommit() public void HasDirtyFlagWhenUncommittedChangesAreInRepo(bool stageFile, int numberOfFiles) { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); for (int i = 0; i < numberOfFiles; i++) { @@ -125,10 +124,1282 @@ public void HasDirtyFlagWhenUncommittedChangesAreInRepo(bool stageFile, int numb public void NoDirtyFlagInCleanRepository() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); var version = fixture.GetVersion(); const int zero = 0; version.UncommittedChanges.ShouldBe(zero.ToString(CultureInfo.InvariantCulture)); } + + [TestCase(false, "1.1.0-alpha.2")] + [TestCase(true, "1.2.0-alpha.1")] + public void EnsureTrackMergeTargetStrategyWhichWillLookForTaggedMergecommits(bool trackMergeTarget, string expectedVersion) + { + // * 9daa6ea 53 minutes ago (HEAD -> develop) + // | * 85536f2 55 minutes ago (tag: 1.1.0, main) + // | |\ + // | |/ + // |/| + // * | 4a5ef1a 56 minutes ago + // |/ + // * c7f68af 58 minutes ago (tag: 1.0.0) + + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder.WithIsMainBranch(false)) + .WithBranch("develop", builder => builder + .WithTrackMergeTarget(trackMergeTarget).WithTracksReleaseBranches(false) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("develop"); + fixture.MakeACommit(); + fixture.Checkout("main"); + fixture.MergeNoFF("develop"); + fixture.ApplyTag("1.1.0"); + fixture.Checkout("develop"); + fixture.MakeACommit(); + + fixture.AssertFullSemver(expectedVersion, configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void EnsurePreReleaseTagLabelWillBeConsideredIfCurrentBranchIsRelease() + { + var configuration = GitHubFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture("release/2.0.0"); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); + + fixture.ApplyTag("2.0.0-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+0", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-beta.2+1", configuration); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWillBeConsideredIfNoLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel(null).WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+2", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.2+1", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.3+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber + 1}-1+1", configuration); + + fixture.Repository.DumpGraph(); + } + + [Test] + public void EnsurePreReleaseTagLabelWithInitialTagForPatchNumberOneWillBeConsideredIfNoLabelIsDefined() + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel(null).WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + + fixture.ApplyTag("1.0.1-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-alpha.2+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-alpha.2+2", configuration); + + fixture.MakeATaggedCommit("1.0.1-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.2+1", configuration); + + fixture.MakeATaggedCommit("1.0.1-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.3+1", configuration); + + fixture.ApplyTag("1.0.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.2-1+1", configuration); + + fixture.Repository.DumpGraph(); + } + + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWithInitialTagForPatchNumberTwoAndThreeWillBeConsideredIfNoLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel(null).WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+2", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.2+1", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.3+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber + 1}-1+1", configuration); + + fixture.Repository.DumpGraph(); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWillBeConsideredIfLabelIsEmpty(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel(string.Empty).WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-1+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+3", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+5", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+6", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-1+7", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber + 1}-1+1", configuration); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWithInitialTagWillBeConsideredIfLabelIsEmpty(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel(string.Empty).WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-1+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+3", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+5", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+6", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-1+7", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber + 1}-1+1", configuration); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWillBeConsideredIfAlphaLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel("alpha").WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-alpha.1+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+2", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+4", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+5", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-alpha.2+6", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber + 1}-alpha.1+1", configuration); + + fixture.Repository.DumpGraph(); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWithInitialTagWillBeConsideredIfAlphaLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel("alpha").WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-alpha.1+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+2", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+3", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+4", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+5", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-alpha.2+6", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber + 1}-alpha.1+1", configuration); + + fixture.Repository.DumpGraph(); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWillBeConsideredIfBetaLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel("beta").WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-beta.1+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.1+3", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.2+1", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-beta.3+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber + 1}-beta.1+1", configuration); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWithInitialTagWillBeConsideredIfBetaLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel("beta").WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-beta.1+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.1+3", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.2+1", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-beta.3+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber + 1}-beta.1+1", configuration); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWillBeConsideredIfGammaLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel("gamma").WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.1-gamma.1+1", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+3", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+5", configuration); + + fixture.MakeATaggedCommit($"0.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+6", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}-gamma.1+7", configuration); + + fixture.ApplyTag($"0.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"0.0.{patchNumber + 1}-gamma.1+1", configuration); + } + + [TestCase(1)] + [TestCase(2)] + [TestCase(3)] + public void EnsurePreReleaseTagLabelWithInitialTagWillBeConsideredIfGammaLabelIsDefined(long patchNumber) + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", branchBuilder => branchBuilder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithLabel("gamma").WithIncrement(IncrementStrategy.Patch) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.1-gamma.1+1", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}-alpha.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+2", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+3", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+5", configuration); + + fixture.MakeATaggedCommit($"1.0.{patchNumber}-beta.2"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+6", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}-gamma.1+7", configuration); + + fixture.ApplyTag($"1.0.{patchNumber}"); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber}", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver($"1.0.{patchNumber + 1}-gamma.1+1", configuration); + } + + [TestCase(null)] + [TestCase("")] + public void IncreaseVersionWithBumpMessageWhenCommitMessageIncrementIsEnabledAndIncrementStrategyIsNoneForBranchWithNoLabel(string? label) + { + var configuration = GitFlowConfigurationBuilder.New.WithLabel(null) + .WithBranch("main", b => b + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Enabled) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithIncrement(IncrementStrategy.None) + .WithLabel(label) + .WithIsMainBranch(false) + ) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-1", configuration); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-2", configuration); + + fixture.ApplyTag("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.MakeACommit("+semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1", configuration); + + fixture.ApplyTag("2.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-1", configuration); + } + + [Test] + public void IncreaseVersionWithBumpMessageWhenCommitMessageIncrementIsEnabledAndIncrementStrategyIsNoneForBranchWithAlphaLabel() + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", b => b + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Enabled) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithIncrement(IncrementStrategy.None) + .WithLabel("pre") + .WithIsMainBranch(false) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.0.0-pre.1", configuration); + + fixture.MakeACommit("+semver: minor"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("0.1.0-pre.2", configuration); + + fixture.ApplyTag("1.0.0"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.MakeACommit("+semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-pre.1", configuration); + + fixture.ApplyTag("2.0.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-pre.1", configuration); + } + + [Test] + public void ShouldProvideTheCorrectVersionEvenIfPreReleaseLabelExistsInTheGitTagMain() + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("5.0") + .WithSemanticVersionFormat(SemanticVersionFormat.Loose) + .WithBranch("main", b => b + .WithLabel("beta") + .WithIncrement(IncrementStrategy.Patch) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithIsMainBranch(false) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("5.0.0-beta.1", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("5.0.0-beta.2", configuration); + + fixture.ApplyTag("5.0.0-beta.3"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("5.0.0-beta.3", configuration); + + fixture.MakeATaggedCommit("5.0.0-rc.1"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("5.0.0-beta.4", configuration); + + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("5.0.0-beta.5", configuration); + } + + /// + /// https://github.com/GitTools/GitVersion/issues/2347 + /// + [Test] + public void EnsureThePreReleaseTagIsCorrectlyGeneratedWhenPreReleaseLabelIsEmpty() + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", b => b + .WithLabel(string.Empty).WithIsMainBranch(false) + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.Repository.MakeCommits(5); + + var _ = fixture.GetVersion(configuration); + + fixture.AssertFullSemver("0.0.1-5", configuration); + } + + [TestCase("0.0.1-alpha.2", true, "0.0.1-alpha.2")] + [TestCase("0.0.1-alpha.2", false, "0.0.1-alpha.3+0")] + [TestCase("0.1.0-alpha.2", true, "0.1.0-alpha.2")] + [TestCase("0.1.0-alpha.2", false, "0.1.0-alpha.3+0")] + [TestCase("0.0.1", true, "0.0.1")] + [TestCase("0.0.1", false, "0.1.0-alpha.1+0")] + [TestCase("0.0.1-beta.2", true, "0.1.0-alpha.1+1")] + [TestCase("0.0.1-beta.2", false, "0.1.0-alpha.1+1")] + [TestCase("0.1.0-beta.2", true, "0.1.0-alpha.1+1")] + [TestCase("0.1.0-beta.2", false, "0.1.0-alpha.1+1")] + [TestCase("0.2.0-beta.2", true, "0.2.0-alpha.1+1")] + [TestCase("0.2.0-beta.2", false, "0.2.0-alpha.1+1")] + public void EnsurePreventIncrementWhenCurrentCommitTaggedOnDevelopWithDeploymentModeManualDeployment( + string tag, bool preventIncrementWhenCurrentCommitTagged, string version) + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit("A"); + if (!tag.IsNullOrEmpty()) fixture.ApplyTag(tag); + fixture.BranchTo("develop"); + + fixture.AssertFullSemver(version, configuration); + } + + [TestCase("0.0.1-alpha.2", true, "0.0.1-alpha.2")] + [TestCase("0.0.1-alpha.2", false, "0.0.1-alpha.2")] + [TestCase("0.1.0-alpha.2", true, "0.1.0-alpha.2")] + [TestCase("0.1.0-alpha.2", false, "0.1.0-alpha.2")] + [TestCase("0.0.1", true, "0.0.1")] + [TestCase("0.0.1", false, "0.1.0-alpha.0")] + [TestCase("0.0.1-beta.2", true, "0.1.0-alpha.1")] + [TestCase("0.0.1-beta.2", false, "0.1.0-alpha.1")] + [TestCase("0.1.0-beta.2", true, "0.1.0-alpha.1")] + [TestCase("0.1.0-beta.2", false, "0.1.0-alpha.1")] + [TestCase("0.2.0-beta.2", true, "0.2.0-alpha.1")] + [TestCase("0.2.0-beta.2", false, "0.2.0-alpha.1")] + public void EnsurePreventIncrementWhenCurrentCommitTaggedOnDevelopWithDeploymentModeContinuousDelivery( + string tag, bool preventIncrementWhenCurrentCommitTagged, string version) + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", b => b + .WithDeploymentMode(DeploymentMode.ContinuousDelivery) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit("A"); + if (!tag.IsNullOrEmpty()) fixture.ApplyTag(tag); + fixture.BranchTo("develop"); + + fixture.AssertFullSemver(version, configuration); + } + + [TestCase("0.0.1-alpha.2", true, "0.0.1")] + [TestCase("0.0.1-alpha.2", false, "0.0.1")] + [TestCase("0.1.0-alpha.2", true, "0.1.0")] + [TestCase("0.1.0-alpha.2", false, "0.1.0")] + [TestCase("0.0.1", true, "0.0.1")] + [TestCase("0.0.1", false, "0.1.0")] + [TestCase("0.0.1-beta.2", true, "0.1.0")] + [TestCase("0.0.1-beta.2", false, "0.1.0")] + [TestCase("0.1.0-beta.2", true, "0.1.0")] + [TestCase("0.1.0-beta.2", false, "0.1.0")] + [TestCase("0.2.0-beta.2", true, "0.2.0")] + [TestCase("0.2.0-beta.2", false, "0.2.0")] + public void EnsurePreventIncrementWhenCurrentCommitTaggedOnDevelopWithDeploymentModeContinuousDeployment( + string tag, bool preventIncrementWhenCurrentCommitTagged, string version) + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("develop", b => b + .WithDeploymentMode(DeploymentMode.ContinuousDeployment) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit("A"); + if (!tag.IsNullOrEmpty()) fixture.ApplyTag(tag); + fixture.BranchTo("develop"); + + fixture.AssertFullSemver(version, configuration); + } + + [TestCase(true, "1.0.0")] + [TestCase(false, "6.0.0-alpha.1+0")] + public void EnsurePreventIncrementWhenCurrentCommitTaggedOnDevelopWithNextVersion(bool preventIncrementWhenCurrentCommitTagged, string semVersion) + { + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("6.0.0") + .WithBranch("develop", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit(); + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("develop"); + + fixture.AssertFullSemver(semVersion, configuration); + } + + [TestCase(null, true, "6.0.0-beta.1+1")] + [TestCase(null, false, "6.0.0-beta.1+1")] + [TestCase(new[] { "5.0.0" }, true, "5.0.0")] + [TestCase(new[] { "5.0.0" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "6.0.0" }, true, "6.0.0")] + [TestCase(new[] { "6.0.0" }, false, "6.1.0-beta.1+0")] + [TestCase(new[] { "7.0.0" }, true, "7.0.0")] + [TestCase(new[] { "7.0.0" }, false, "7.1.0-beta.1+0")] + [TestCase(new[] { "5.0.0-alpha.2" }, true, "6.0.0-beta.1+1")] + [TestCase(new[] { "5.0.0-alpha.2" }, false, "6.0.0-beta.1+1")] + [TestCase(new[] { "6.0.0-alpha.2" }, true, "6.0.0-beta.1+1")] + [TestCase(new[] { "6.0.0-alpha.2" }, false, "6.0.0-beta.1+1")] + [TestCase(new[] { "7.0.0-alpha.2" }, true, "7.0.0-beta.1+1")] + [TestCase(new[] { "7.0.0-alpha.2" }, false, "7.0.0-beta.1+1")] + [TestCase(new[] { "5.0.0-beta.2" }, true, "5.0.0-beta.2")] + [TestCase(new[] { "5.0.0-beta.2" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "6.0.0-beta.2" }, true, "6.0.0-beta.2")] + [TestCase(new[] { "6.0.0-beta.2" }, false, "6.0.0-beta.3+0")] + [TestCase(new[] { "7.0.0-beta.2" }, true, "7.0.0-beta.2")] + [TestCase(new[] { "7.0.0-beta.2" }, false, "7.0.0-beta.3+0")] + [TestCase(new[] { "5.0.0", "6.0.0" }, true, "6.0.0")] + [TestCase(new[] { "5.0.0", "6.0.0" }, false, "6.1.0-beta.1+0")] + [TestCase(new[] { "6.0.0", "5.0.0" }, true, "6.0.0")] + [TestCase(new[] { "6.0.0", "5.0.0" }, false, "6.1.0-beta.1+0")] + [TestCase(new[] { "6.0.0", "7.0.0" }, true, "7.0.0")] + [TestCase(new[] { "6.0.0", "7.0.0" }, false, "7.1.0-beta.1+0")] + [TestCase(new[] { "7.0.0", "6.0.0" }, true, "7.0.0")] + [TestCase(new[] { "7.0.0", "6.0.0" }, false, "7.1.0-beta.1+0")] + [TestCase(new[] { "4.0.0", "5.0.0-alpha.2" }, true, "4.0.0")] + [TestCase(new[] { "4.0.0", "5.0.0-alpha.2" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "5.0.0-alpha.2", "4.0.0" }, true, "4.0.0")] + [TestCase(new[] { "5.0.0-alpha.2", "4.0.0" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "4.0.0", "5.0.0-beta.2" }, true, "5.0.0-beta.2")] + [TestCase(new[] { "4.0.0", "5.0.0-beta.2" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "5.0.0-beta.2", "4.0.0" }, true, "5.0.0-beta.2")] + [TestCase(new[] { "5.0.0-beta.2", "4.0.0" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "4.0.0-alpha.2", "5.0.0-beta.2" }, true, "5.0.0-beta.2")] + [TestCase(new[] { "4.0.0-alpha.2", "5.0.0-beta.2" }, false, "6.0.0-beta.1+0")] + [TestCase(new[] { "5.0.0-beta.2", "4.0.0-alpha.2" }, true, "5.0.0-beta.2")] + [TestCase(new[] { "5.0.0-beta.2", "4.0.0-alpha.2" }, false, "6.0.0-beta.1+0")] + public void EnsurePreventIncrementWhenCurrentCommitTaggedOnReleaseBranchAndIncrementMinor( + string[]? tags, bool preventIncrementWhenCurrentCommitTagged, string semVersion) + { + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("release", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithPreventIncrementWhenCurrentCommitTagged(preventIncrementWhenCurrentCommitTagged) + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit(); + + if (tags is not null) + { + foreach (string tag in tags) + { + fixture.ApplyTag(tag); + } + } + + fixture.BranchTo("release/6.0.0"); + + fixture.AssertFullSemver(semVersion, configuration); + } + + [Test] + public void EnsureVersionAfterMainIsMergedBackToDevelopIsCorrect() + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("develop"); + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.1"); + + fixture.Checkout("main"); + fixture.MakeACommit("B"); + fixture.BranchTo("hotfix/just-a-hotfix"); + fixture.MakeACommit("C +semver: major"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + fixture.Checkout("develop"); + fixture.MakeACommit("D"); + fixture.Checkout("main"); + fixture.MakeACommit("E"); + fixture.ApplyTag("1.0.1"); + fixture.Checkout("develop"); + fixture.MergeNoFF("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-alpha.3"); + } + + [TestCase(false, "2.0.0-alpha.2")] + [TestCase(true, "2.0.0-alpha.2")] + public void EnsureVersionAfterMainIsMergedBackToDevelopIsCorrectForMainline(bool applyTag, string semanticVersion) + { + var configuration = GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("1.0.0"); + fixture.BranchTo("develop"); + fixture.MakeACommit("B +semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-alpha.1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + if (applyTag) fixture.ApplyTag("1.0.1"); + fixture.Checkout("develop"); + fixture.MergeNoFF("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver(semanticVersion, configuration); + } + + [TestCase(false, "2.0.0-alpha.3")] + [TestCase(true, "2.0.0-alpha.3")] + public void EnsureVersionAfterMainIsMergedBackToDevelopIsCorrectForGitFlow(bool applyTag, string semanticVersion) + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("1.0.0"); + fixture.BranchTo("develop"); + fixture.MakeACommit("B +semver: major"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-alpha.1", configuration); + + fixture.Checkout("main"); + fixture.MakeACommit("C"); + if (applyTag) fixture.ApplyTag("1.0.1"); + fixture.Checkout("develop"); + fixture.MergeNoFF("main"); + + // ✅ succeeds as expected + fixture.AssertFullSemver(semanticVersion, configuration); + } + + /// + /// see https://github.com/GitTools/GitVersion/issues/2394 + /// + [Test] + public void EnsureVersionSourceIsSetToTheRightTag() + { + // Arrange + var configuration = GitFlowConfigurationBuilder.New.Build(); + + // Act + using var fixture = new BaseGitFlowRepositoryFixture("0.1.0"); + + fixture.Checkout("main"); + fixture.MergeNoFF("develop"); + fixture.Checkout("develop"); + fixture.MakeACommit("Feature commit 1"); + fixture.BranchTo("release/0.2.0"); + fixture.MakeACommit("Release commit 1"); + fixture.Checkout("main"); + fixture.MergeNoFF("release/0.2.0"); + fixture.ApplyTag("0.2.0"); + var tag = fixture.Repository.Head.Tip; + fixture.Checkout("develop"); + fixture.MergeNoFF("main"); + var version = fixture.GetVersion(configuration); + + // Assert + version.VersionSourceSha.ShouldBe(tag.Sha); + } + + /// + /// see https://github.com/GitTools/GitVersion/issues/3689 + /// + [Test] + public void UnversionedHotfix() + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new BaseGitFlowRepositoryFixture("1.2.0"); + + // create hotfix + Commands.Checkout(fixture.Repository, "main"); + Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("hotfix/put-out-the-fire")); + fixture.Repository.MakeACommit(); + + fixture.AssertFullSemver("1.2.1-beta.1+1", configuration); + fixture.Repository.MakeACommit(); + fixture.AssertFullSemver("1.2.1-beta.1+2", configuration); + + // Merge hotfix branch to main + Commands.Checkout(fixture.Repository, "main"); + + fixture.Repository.MergeNoFF("hotfix/put-out-the-fire", Generate.SignatureNow()); + + fixture.AssertFullSemver("1.2.1-3", configuration); + } + + [Test] + public void AlternativeSemanticVersionsShouldBeConsidered() + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeATaggedCommit("4.0.0-beta.14"); + fixture.MakeACommit("B"); + + fixture.AssertFullSemver("4.0.0-3", configuration); + } + + [TestCase(null, "6.0.0-beta.6")] + [TestCase("beta", "6.0.0-beta.21")] + public void AlternativeSemanticVersionsShouldBeConsidered(string? labelOnMain, string version) + { + var configuration = GitFlowConfigurationBuilder.New + .WithLabel(null) + .WithBranch("main", b => b.WithLabel(labelOnMain)) + .Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeATaggedCommit("4.0.0-beta.14"); + fixture.MakeACommit("A"); + fixture.MakeATaggedCommit("6.0.0-alpha.1"); + fixture.MakeATaggedCommit("6.0.0-alpha.2"); + fixture.MakeATaggedCommit("6.0.0-alpha.3"); + fixture.MakeACommit("B"); + fixture.MakeATaggedCommit("6.0.0-beta.5"); + fixture.MakeACommit("C"); + + fixture.AssertFullSemver(version, configuration); + } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/PerformanceScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/PerformanceScenarios.cs new file mode 100644 index 0000000000..b79e2644d9 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/PerformanceScenarios.cs @@ -0,0 +1,31 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; + +namespace GitVersion.Core.Tests.IntegrationTests; + +public class PerformanceScenarios : TestBase +{ + [Test] + public void RepositoryWithALotOfTags() + { + var configuration = GitFlowConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + + const int maxCommits = 500; + for (int i = 0; i < maxCommits; i++) + { + fixture.MakeATaggedCommit($"1.0.{i}"); + } + + fixture.BranchTo("feature"); + fixture.MakeACommit(); + + var sw = Stopwatch.StartNew(); + + fixture.AssertFullSemver($"1.0.{maxCommits}-feature.1+1", configuration); + sw.Stop(); + + sw.ElapsedMilliseconds.ShouldBeLessThan(5000); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/PullRequestScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/PullRequestScenarios.cs index ce3aa66d62..683d3dbec7 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/PullRequestScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/PullRequestScenarios.cs @@ -1,13 +1,54 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; [TestFixture] public class PullRequestScenarios : TestBase { + /// + /// GitHubFlow - Pull requests (increment major on main and minor on feature) + /// + [Test] + public void EnsurePullRequestWithIncrementMajorOnMainAndMinorOnFeatureBranch() + { + var configuration = GitHubFlowConfigurationBuilder.New + .WithBranch("main", b => b + .WithIncrement(IncrementStrategy.Major) + ).WithBranch("feature", b => b + .WithIncrement(IncrementStrategy.Minor) + ).Build(); + + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.0.0-1", configuration); + + fixture.ApplyTag("1.0.0"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-foo.1+1", configuration); + + fixture.Checkout("main"); + fixture.BranchTo("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-PullRequest2.2", configuration); + + fixture.Checkout("main"); + fixture.Remove("pull/2/merge"); + fixture.MergeNoFF("feature/foo"); + + // ✅ succeeds as expected + fixture.AssertFullSemver("2.0.0-2", configuration); + } + [Test] public void CanCalculatePullRequestChanges() { @@ -19,7 +60,7 @@ public void CanCalculatePullRequestChanges() fixture.Repository.CreatePullRequestRef("feature/Foo", MainBranch, normalise: true); fixture.Repository.DumpGraph(); - fixture.AssertFullSemver("0.1.1-PullRequest0002.2"); + fixture.AssertFullSemver("0.1.1-PullRequest2.2"); } [Test] @@ -35,7 +76,7 @@ public void CanCalculatePullRequestChangesInheritingConfig() fixture.Repository.CreatePullRequestRef("feature/Foo", "develop", 44, true); fixture.Repository.DumpGraph(); - fixture.AssertFullSemver("0.2.0-PullRequest0044.3"); + fixture.AssertFullSemver("0.2.0-PullRequest44.3"); } [Test] @@ -46,11 +87,10 @@ public void CanCalculatePullRequestChangesFromRemoteRepo() Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("feature/Foo")); fixture.Repository.MakeACommit(); - fixture.Repository.CreatePullRequestRef("feature/Foo", MainBranch, normalise: true); fixture.Repository.DumpGraph(); - fixture.AssertFullSemver("0.1.1-PullRequest0002.2"); + fixture.AssertFullSemver("0.1.1-PullRequest2.2"); } [Test] @@ -65,7 +105,7 @@ public void CanCalculatePullRequestChangesInheritingConfigFromRemoteRepo() fixture.Repository.CreatePullRequestRef("feature/Foo", "develop", normalise: true); - fixture.AssertFullSemver("0.2.0-PullRequest0002.3"); + fixture.AssertFullSemver("0.2.0-PullRequest2.3"); } [Test] @@ -81,7 +121,7 @@ public void CanCalculatePullRequestChangesWhenThereAreMultipleMergeCandidates() fixture.Repository.CreatePullRequestRef("feature/Foo", "develop", normalise: true); - fixture.AssertFullSemver("0.2.0-PullRequest0002.3"); + fixture.AssertFullSemver("0.2.0-PullRequest2.3"); } [Test] @@ -89,13 +129,13 @@ public void CalculatesCorrectVersionAfterReleaseBranchMergedToMain() { using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.0"); - fixture.Repository.MakeACommit(); + fixture.Repository.MakeACommit("one"); Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("release/2.0.0")); - fixture.Repository.MakeACommit(); - fixture.Repository.MakeACommit(); + fixture.Repository.MakeACommit("two"); + fixture.Repository.MakeACommit("three"); fixture.Repository.CreatePullRequestRef("release/2.0.0", MainBranch, normalise: true); - fixture.AssertFullSemver("2.0.0-PullRequest0002.0"); + fixture.AssertFullSemver("2.0.0-PullRequest2.4"); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/ReleaseBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/ReleaseBranchScenarios.cs index 0fd75f14a8..8437c3fd33 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/ReleaseBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/ReleaseBranchScenarios.cs @@ -1,11 +1,6 @@ -using GitTools.Testing; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -47,13 +42,13 @@ public void NoMergeBacksToDevelopInCaseThereAreChangesInReleaseBranch() // Merge to develop fixture.Checkout("develop"); + fixture.AssertFullSemver("1.1.0-alpha.0"); fixture.Repository.MergeNoFF("release/1.0.0"); - fixture.AssertFullSemver("1.1.0-alpha.2"); - + fixture.AssertFullSemver("1.1.0-alpha.1"); fixture.Repository.MakeACommit(); + fixture.AssertFullSemver("1.1.0-alpha.2"); fixture.Repository.Branches.Remove("release/1.0.0"); - - fixture.AssertFullSemver("1.1.0-alpha.3"); + fixture.AssertFullSemver("1.1.0-alpha.2"); } [Test] @@ -65,9 +60,9 @@ public void CanTakeVersionFromReleaseBranch() fixture.Repository.CreateBranch("release-2.0.0"); fixture.Checkout("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.1+0"); + fixture.AssertFullSemver("2.0.0-beta.1+5"); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("2.0.0-beta.1+2"); + fixture.AssertFullSemver("2.0.0-beta.1+7"); } [Test] @@ -79,9 +74,9 @@ public void CanTakeVersionFromReleasesBranch() fixture.Repository.CreateBranch("releases/2.0.0"); fixture.Checkout("releases/2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.1+0"); + fixture.AssertFullSemver("2.0.0-beta.1+5"); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("2.0.0-beta.1+2"); + fixture.AssertFullSemver("2.0.0-beta.1+7"); } [Test] @@ -91,47 +86,41 @@ public void CanTakePreReleaseVersionFromReleasesBranchWithNumericPreReleaseTag() fixture.Repository.MakeCommits(5); fixture.Repository.CreateBranch("releases/2.0.0"); fixture.Checkout("releases/2.0.0"); - fixture.Repository.ApplyTag("v2.0.0-1"); + fixture.Repository.ApplyTag("v2.0.0-beta.1"); var variables = fixture.GetVersion(); - Assert.AreEqual("2.0.0-1", variables.FullSemVer); + Assert.That(variables.FullSemVer, Is.EqualTo("2.0.0-beta.2+0")); } [Test] public void ReleaseBranchWithNextVersionSetInConfig() { - var config = new Config - { - NextVersion = "2.0.0" - }; + var configuration = GitFlowConfigurationBuilder.New.WithNextVersion("2.0.0").Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeCommits(5); fixture.BranchTo("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.1+0", config); + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("2.0.0-beta.1+2", config); + fixture.AssertFullSemver("2.0.0-beta.1+7", configuration); } [Test] - public void CanTakeVersionFromReleaseBranchWithTagOverridden() + public void CanTakeVersionFromReleaseBranchWithLabelOverridden() { - var config = new Config - { - Branches = - { - { "release", new BranchConfig { Tag = "rc" } } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("release", builder => builder.WithLabel("rc")) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.3"); fixture.Repository.MakeCommits(5); fixture.Repository.CreateBranch("release-2.0.0"); fixture.Checkout("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-rc.1+0", config); + fixture.AssertFullSemver("2.0.0-rc.1+5", configuration); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("2.0.0-rc.1+2", config); + fixture.AssertFullSemver("2.0.0-rc.1+7", configuration); } [Test] @@ -144,9 +133,9 @@ public void CanHandleReleaseBranchWithStability() fixture.Repository.CreateBranch("release-2.0.0-Final"); fixture.Checkout("release-2.0.0-Final"); - fixture.AssertFullSemver("2.0.0-beta.1+0"); + fixture.AssertFullSemver("2.0.0-beta.1+5"); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("2.0.0-beta.1+2"); + fixture.AssertFullSemver("2.0.0-beta.1+7"); } [Test] @@ -163,9 +152,9 @@ public void WhenReleaseBranchOffDevelopIsMergedIntoMainAndDevelopVersionIsTakenW fixture.Checkout(MainBranch); fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); - fixture.AssertFullSemver("2.0.0+0"); + fixture.AssertFullSemver("2.0.0-6"); fixture.Repository.MakeCommits(2); - fixture.AssertFullSemver("2.0.0+2"); + fixture.AssertFullSemver("2.0.0-8"); } [Test] @@ -180,7 +169,7 @@ public void WhenReleaseBranchOffMainIsMergedIntoMainVersionIsTakenWithIt() fixture.Checkout(MainBranch); fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); - fixture.AssertFullSemver("2.0.0+0"); + fixture.AssertFullSemver("2.0.0-6"); } [Test] @@ -195,10 +184,12 @@ public void MainVersioningContinuousCorrectlyAfterMergingReleaseBranch() fixture.Checkout(MainBranch); fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); - fixture.AssertFullSemver("2.0.0+0"); + fixture.AssertFullSemver("2.0.0-6"); + fixture.Repository.Branches.Remove("release-2.0.0"); + fixture.AssertFullSemver("2.0.0-6"); fixture.Repository.ApplyTag("2.0.0"); fixture.Repository.MakeCommits(1); - fixture.AssertFullSemver("2.0.1+1"); + fixture.AssertFullSemver("2.0.1-1"); } [Test] @@ -243,7 +234,7 @@ public void WhenReleaseBranchIsMergedIntoMainHighestVersionIsTakenWithIt() fixture.Checkout(MainBranch); fixture.Repository.MergeNoFF("release-1.0.0", Generate.SignatureNow()); - fixture.AssertFullSemver("2.0.0+5"); + fixture.AssertFullSemver("2.0.0-11"); } [Test] @@ -271,7 +262,7 @@ public void WhenReleaseBranchIsMergedIntoMainHighestVersionIsTakenWithItEvenWith fixture.Checkout(MainBranch); fixture.Repository.MergeNoFF("release-1.0.0", Generate.SignatureNow()); - fixture.AssertFullSemver("3.0.0+10"); + fixture.AssertFullSemver("3.0.0-16"); } [Test] @@ -290,14 +281,14 @@ public void WhenMergingReleaseBackToDevShouldNotResetBetaVersion() fixture.Checkout("release-2.0.0"); fixture.Repository.MakeCommits(1); - fixture.AssertFullSemver("2.0.0-beta.1+1"); + fixture.AssertFullSemver("2.0.0-beta.1+2"); //tag it to bump to beta 2 fixture.Repository.ApplyTag("2.0.0-beta1"); fixture.Repository.MakeCommits(1); - fixture.AssertFullSemver("2.0.0-beta.2+2"); + fixture.AssertFullSemver("2.0.0-beta.2+1"); //merge down to develop fixture.Checkout("develop"); @@ -305,18 +296,15 @@ public void WhenMergingReleaseBackToDevShouldNotResetBetaVersion() //but keep working on the release fixture.Checkout("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.2+2"); + fixture.AssertFullSemver("2.0.0-beta.2+1"); fixture.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.2+3"); + fixture.AssertFullSemver("2.0.0-beta.2+2"); } [Test] public void HotfixOffReleaseBranchShouldNotResetCount() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); @@ -329,12 +317,12 @@ public void HotfixOffReleaseBranchShouldNotResetCount() fixture.Checkout("release-2.0.0"); fixture.Repository.MakeCommits(1); - fixture.AssertFullSemver("2.0.0-beta.1", config); + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); //tag it to bump to beta 2 fixture.Repository.MakeCommits(4); - fixture.AssertFullSemver("2.0.0-beta.5", config); + fixture.AssertFullSemver("2.0.0-beta.1+6", configuration); //merge down to develop fixture.Repository.CreateBranch("hotfix-2.0.0"); @@ -344,17 +332,16 @@ public void HotfixOffReleaseBranchShouldNotResetCount() fixture.Checkout("release-2.0.0"); fixture.Repository.MergeNoFF("hotfix-2.0.0", Generate.SignatureNow()); fixture.Repository.Branches.Remove(fixture.Repository.Branches["hotfix-2.0.0"]); - fixture.AssertFullSemver("2.0.0-beta.7", config); + fixture.AssertFullSemver("2.0.0-beta.1+8", configuration); } [Test] public void MergeOnReleaseBranchShouldNotResetCount() { - var config = new Config - { - AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyVersioningScheme(AssemblyVersioningScheme.MajorMinorPatchTag) + .Build(); + using var fixture = new EmptyRepositoryFixture(); const string taggedVersion = "1.0.3"; fixture.Repository.MakeATaggedCommit(taggedVersion); @@ -367,23 +354,20 @@ public void MergeOnReleaseBranchShouldNotResetCount() fixture.Repository.CreateBranch("release/2.0.0-xxx"); fixture.Checkout("release/2.0.0-xxx"); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.1", config); + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); fixture.Checkout("release/2.0.0"); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.1", config); + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); fixture.Repository.MergeNoFF("release/2.0.0-xxx"); - fixture.AssertFullSemver("2.0.0-beta.2", config); + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); } [Test] public void CommitOnDevelopAfterReleaseBranchMergeToDevelopShouldNotResetCount() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit("initial"); @@ -391,12 +375,12 @@ public void CommitOnDevelopAfterReleaseBranchMergeToDevelopShouldNotResetCount() // Create release from develop fixture.BranchTo("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.0", config); + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); // Make some commits on release fixture.MakeACommit("release 1"); fixture.MakeACommit("release 2"); - fixture.AssertFullSemver("2.0.0-beta.2", config); + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); // First forward merge release to develop fixture.Checkout("develop"); @@ -405,24 +389,24 @@ public void CommitOnDevelopAfterReleaseBranchMergeToDevelopShouldNotResetCount() // Make some new commit on release fixture.Checkout("release-2.0.0"); fixture.Repository.MakeACommit("release 3 - after first merge"); - fixture.AssertFullSemver("2.0.0-beta.3", config); + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); // Make new commit on develop fixture.Checkout("develop"); // Checkout to release (no new commits) fixture.Checkout("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.3", config); + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); fixture.Checkout("develop"); fixture.Repository.MakeACommit("develop after merge"); // Checkout to release (no new commits) fixture.Checkout("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.3", config); + fixture.AssertFullSemver("2.0.0-beta.1+4", configuration); // Make some new commit on release fixture.Repository.MakeACommit("release 4"); fixture.Repository.MakeACommit("release 5"); - fixture.AssertFullSemver("2.0.0-beta.5", config); + fixture.AssertFullSemver("2.0.0-beta.1+6", configuration); // Second merge release to develop fixture.Checkout("develop"); @@ -430,16 +414,13 @@ public void CommitOnDevelopAfterReleaseBranchMergeToDevelopShouldNotResetCount() // Checkout to release (no new commits) fixture.Checkout("release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.5", config); + fixture.AssertFullSemver("2.0.0-beta.1+6", configuration); } [Test] - public void CommitBeetweenMergeReleaseToDevelopShouldNotResetCount() + public void CommitBetweenMergeReleaseToDevelopShouldNotResetCount() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("initial"); @@ -447,30 +428,35 @@ public void CommitBeetweenMergeReleaseToDevelopShouldNotResetCount() Commands.Checkout(fixture.Repository, "develop"); fixture.Repository.CreateBranch("release-2.0.0"); Commands.Checkout(fixture.Repository, "release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.0", config); + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); // Make some commits on release var commit1 = fixture.Repository.MakeACommit(); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.2", config); + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); // Merge release to develop - emulate commit between other person release commit push and this commit merge to develop Commands.Checkout(fixture.Repository, "develop"); - fixture.Repository.Merge(commit1, Generate.SignatureNow(), new MergeOptions { FastForwardStrategy = FastForwardStrategy.NoFastForward }); + fixture.Repository.Merge(commit1, Generate.SignatureNow(), new() { FastForwardStrategy = FastForwardStrategy.NoFastForward }); fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow()); // Check version on release after merge to develop Commands.Checkout(fixture.Repository, "release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.2", config); + fixture.AssertFullSemver("2.0.0-beta.1+3", configuration); // Check version on release after making some new commits fixture.Repository.MakeACommit(); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("2.0.0-beta.4", config); + fixture.AssertFullSemver("2.0.0-beta.1+5", configuration); } - public static void ReleaseBranchShouldUseBranchNameVersionDespiteBumpInPreviousCommit() + [Test] + public void ReleaseBranchShouldUseBranchNameVersionDespiteBumpInPreviousCommit() { + var configuration = GitFlowConfigurationBuilder.New + .WithSemanticVersionFormat(SemanticVersionFormat.Loose) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0"); fixture.Repository.MakeACommit("+semver:major"); @@ -478,18 +464,18 @@ public static void ReleaseBranchShouldUseBranchNameVersionDespiteBumpInPreviousC fixture.BranchTo("release/2.0"); - fixture.AssertFullSemver("2.0.0-beta.1+2"); + fixture.AssertFullSemver("2.0.0-beta.1+2", configuration); } [Test] public void ReleaseBranchWithACommitShouldUseBranchNameVersionDespiteBumpInPreviousCommit() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeATaggedCommit("1.0"); + fixture.Repository.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeACommit("+semver:major"); fixture.Repository.MakeACommit(); - fixture.BranchTo("release/2.0"); + fixture.BranchTo("release/2.0.0"); fixture.Repository.MakeACommit(); @@ -500,10 +486,10 @@ public void ReleaseBranchWithACommitShouldUseBranchNameVersionDespiteBumpInPrevi public void ReleaseBranchedAtCommitWithSemverMessageShouldUseBranchNameVersion() { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeATaggedCommit("1.0"); + fixture.Repository.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeACommit("+semver:major"); - fixture.BranchTo("release/2.0"); + fixture.BranchTo("release/2.0.0"); fixture.AssertFullSemver("2.0.0-beta.1+1"); } @@ -511,10 +497,7 @@ public void ReleaseBranchedAtCommitWithSemverMessageShouldUseBranchNameVersion() [Test] public void FeatureFromReleaseBranchShouldNotResetCount() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit("initial"); @@ -522,11 +505,11 @@ public void FeatureFromReleaseBranchShouldNotResetCount() Commands.Checkout(fixture.Repository, "develop"); fixture.Repository.CreateBranch("release-2.0.0"); Commands.Checkout(fixture.Repository, "release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.0", config); + fixture.AssertFullSemver("2.0.0-beta.1+1", configuration); // Make some commits on release fixture.Repository.MakeCommits(10); - fixture.AssertFullSemver("2.0.0-beta.10", config); + fixture.AssertFullSemver("2.0.0-beta.1+11", configuration); // Create feature from release fixture.BranchTo("feature/xxx"); @@ -535,9 +518,9 @@ public void FeatureFromReleaseBranchShouldNotResetCount() // Check version on release Commands.Checkout(fixture.Repository, "release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.10", config); + fixture.AssertFullSemver("2.0.0-beta.1+11", configuration); fixture.Repository.MakeACommit("release 11"); - fixture.AssertFullSemver("2.0.0-beta.11", config); + fixture.AssertFullSemver("2.0.0-beta.1+12", configuration); // Make new commit on feature Commands.Checkout(fixture.Repository, "feature/xxx"); @@ -545,52 +528,39 @@ public void FeatureFromReleaseBranchShouldNotResetCount() // Checkout to release (no new commits) Commands.Checkout(fixture.Repository, "release-2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.11", config); + fixture.AssertFullSemver("2.0.0-beta.1+12", configuration); // Merge feature to release fixture.Repository.MergeNoFF("feature/xxx", Generate.SignatureNow()); - fixture.AssertFullSemver("2.0.0-beta.15", config); + fixture.AssertFullSemver("2.0.0-beta.1+16", configuration); fixture.Repository.MakeACommit("release 13 - after feature merge"); - fixture.AssertFullSemver("2.0.0-beta.16", config); + fixture.AssertFullSemver("2.0.0-beta.1+17", configuration); } [Test] public void AssemblySemFileVerShouldBeWeightedByPreReleaseWeight() { - var config = new ConfigurationBuilder() - .Add(new Config - { - AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", - Branches = - { - { - "release", new BranchConfig - { - PreReleaseWeight = 1000 - } - } - } - }) + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyFileVersioningFormat("{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}") + .WithBranch("release", builder => builder.WithPreReleaseWeight(1000)) .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeATaggedCommit("1.0.3"); fixture.Repository.MakeCommits(5); fixture.Repository.CreateBranch("release-2.0.0"); fixture.Checkout("release-2.0.0"); - var variables = fixture.GetVersion(config); - Assert.AreEqual("2.0.0.1001", variables.AssemblySemFileVer); + var variables = fixture.GetVersion(configuration); + Assert.That(variables.AssemblySemFileVer, Is.EqualTo("2.0.0.1001")); } [Test] public void AssemblySemFileVerShouldBeWeightedByDefaultPreReleaseWeight() { - var config = new ConfigurationBuilder() - .Add(new Config - { - AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}" - }) + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyFileVersioningFormat("{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}") .Build(); using var fixture = new EmptyRepositoryFixture(); @@ -598,8 +568,8 @@ public void AssemblySemFileVerShouldBeWeightedByDefaultPreReleaseWeight() fixture.Repository.MakeCommits(5); fixture.Repository.CreateBranch("release-2.0.0"); fixture.Checkout("release-2.0.0"); - var variables = fixture.GetVersion(config); - Assert.AreEqual("2.0.0.30001", variables.AssemblySemFileVer); + var variables = fixture.GetVersion(configuration); + Assert.That(variables.AssemblySemFileVer, Is.EqualTo("2.0.0.30001")); } /// @@ -608,11 +578,9 @@ public void AssemblySemFileVerShouldBeWeightedByDefaultPreReleaseWeight() [Test] public void FeatureOnReleaseFeatureBranchDeleted() { - var config = new Config - { - AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyVersioningScheme(AssemblyVersioningScheme.MajorMinorPatchTag) + .Build(); using var fixture = new EmptyRepositoryFixture(); const string release450 = "release/4.5.0"; @@ -625,7 +593,7 @@ public void FeatureOnReleaseFeatureBranchDeleted() // begin the release branch fixture.Repository.CreateBranch(release450); Commands.Checkout(fixture.Repository, release450); - fixture.AssertFullSemver("4.5.0-beta.0", config); + fixture.AssertFullSemver("4.5.0-beta.1+1", configuration); fixture.Repository.CreateBranch(featureBranch); Commands.Checkout(fixture.Repository, featureBranch); @@ -634,7 +602,7 @@ public void FeatureOnReleaseFeatureBranchDeleted() fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 fixture.Repository.Branches.Remove(featureBranch); - fixture.AssertFullSemver("4.5.0-beta.2", config); + fixture.AssertFullSemver("4.5.0-beta.1+3", configuration); } /// @@ -643,11 +611,9 @@ public void FeatureOnReleaseFeatureBranchDeleted() [Test] public void FeatureOnReleaseFeatureBranchNotDeleted() { - var config = new Config - { - AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, - VersioningMode = VersioningMode.ContinuousDeployment - }; + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyVersioningScheme(AssemblyVersioningScheme.MajorMinorPatchTag) + .Build(); using var fixture = new EmptyRepositoryFixture(); const string release450 = "release/4.5.0"; @@ -660,7 +626,7 @@ public void FeatureOnReleaseFeatureBranchNotDeleted() // begin the release branch fixture.Repository.CreateBranch(release450); Commands.Checkout(fixture.Repository, release450); - fixture.AssertFullSemver("4.5.0-beta.0", config); + fixture.AssertFullSemver("4.5.0-beta.1+1", configuration); fixture.Repository.CreateBranch(featureBranch); Commands.Checkout(fixture.Repository, featureBranch); @@ -668,6 +634,21 @@ public void FeatureOnReleaseFeatureBranchNotDeleted() Commands.Checkout(fixture.Repository, release450); fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 - fixture.AssertFullSemver("4.5.0-beta.2", config); + fixture.AssertFullSemver("4.5.0-beta.1+3", configuration); + } + + [TestCase("release/1.2.0", "1.2.0-beta.1+1", SemanticVersionFormat.Loose)] + [TestCase("release/1.2.0", "1.2.0-beta.1+1", SemanticVersionFormat.Strict)] + [TestCase("release/1.2", "1.2.0-beta.1+1", SemanticVersionFormat.Loose)] + [TestCase("release/1", "1.0.0-beta.1+1", SemanticVersionFormat.Loose)] + public void ShouldDetectVersionInReleaseBranch(string branchName, string expectedVersion, SemanticVersionFormat semanticVersionFormat) + { + var configuration = GitFlowConfigurationBuilder.New + .WithSemanticVersionFormat(semanticVersionFormat) + .Build(); + + using var fixture = new EmptyRepositoryFixture(branchName); + fixture.MakeACommit(); + fixture.AssertFullSemver(expectedVersion, configuration); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/RemoteRepositoryScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/RemoteRepositoryScenarios.cs index cafed1dfcc..e81eb3c3a5 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/RemoteRepositoryScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/RemoteRepositoryScenarios.cs @@ -1,10 +1,8 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests.Helpers; using LibGit2Sharp; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -15,14 +13,14 @@ public class RemoteRepositoryScenarios : TestBase public void GivenARemoteGitRepositoryWithCommitsThenClonedLocalShouldMatchRemoteVersion() { using var fixture = new RemoteRepositoryFixture(); - fixture.AssertFullSemver("0.1.0+4"); - fixture.AssertFullSemver("0.1.0+4", repository: fixture.LocalRepositoryFixture.Repository); + fixture.AssertFullSemver("0.0.1-5"); + fixture.AssertFullSemver("0.0.1-5", repository: fixture.LocalRepositoryFixture.Repository); } [Test] public void GivenARemoteGitRepositoryWithCommitsAndBranchesThenClonedLocalShouldMatchRemoteVersion() { - const string targetBranch = "release-1.0"; + const string targetBranch = "release-1.0.0"; using var fixture = new RemoteRepositoryFixture( path => { @@ -69,8 +67,8 @@ public void GivenARemoteGitRepositoryWithCommitsAndBranchesThenClonedLocalShould gitPreparer.Prepare(); - fixture.AssertFullSemver("1.0.0-beta.1+5"); - fixture.AssertFullSemver("1.0.0-beta.1+5", repository: fixture.LocalRepositoryFixture.Repository); + fixture.AssertFullSemver("1.0.0-beta.1+10"); + fixture.AssertFullSemver("1.0.0-beta.1+10", repository: fixture.LocalRepositoryFixture.Repository); } [Test] @@ -78,11 +76,11 @@ public void GivenARemoteGitRepositoryAheadOfLocalRepositoryThenChangesShouldPull { using var fixture = new RemoteRepositoryFixture(); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("0.1.0+5"); - fixture.AssertFullSemver("0.1.0+4", repository: fixture.LocalRepositoryFixture.Repository); - var buildSignature = fixture.LocalRepositoryFixture.Repository.Config.BuildSignature(new DateTimeOffset(DateTime.Now)); - Commands.Pull((Repository)fixture.LocalRepositoryFixture.Repository, buildSignature, new PullOptions()); - fixture.AssertFullSemver("0.1.0+5", repository: fixture.LocalRepositoryFixture.Repository); + fixture.AssertFullSemver("0.0.1-6"); + fixture.AssertFullSemver("0.0.1-5", repository: fixture.LocalRepositoryFixture.Repository); + var buildSignature = fixture.LocalRepositoryFixture.Repository.Config.BuildSignature(new(DateTime.Now)); + Commands.Pull(fixture.LocalRepositoryFixture.Repository, buildSignature, new()); + fixture.AssertFullSemver("0.0.1-6", repository: fixture.LocalRepositoryFixture.Repository); } [Test] @@ -93,17 +91,16 @@ public void GivenARemoteGitRepositoryWhenCheckingOutDetachedHeadUsingExistingImp fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Head.Tip); - fixture.AssertFullSemver("0.1.0--no-branch-.1+4", repository: fixture.LocalRepositoryFixture.Repository, onlyTrackedBranches: false); + fixture.AssertFullSemver("0.0.1--no-branch-.1+5", repository: fixture.LocalRepositoryFixture.Repository, onlyTrackedBranches: false); } [Test] - [Ignore("Needs more investigations.")] public void GivenARemoteGitRepositoryWhenCheckingOutDetachedHeadUsingTrackingBranchOnlyBehaviourShouldReturnVersion014Plus5() { using var fixture = new RemoteRepositoryFixture(); Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Head.Tip); - fixture.AssertFullSemver("0.1.0+4", repository: fixture.LocalRepositoryFixture.Repository); + fixture.AssertFullSemver("0.0.1--no-branch-.1+5", repository: fixture.LocalRepositoryFixture.Repository); } [Test] @@ -138,4 +135,22 @@ private static void CopyRemoteBranchesToHeads(IRepository repository) } } } + + [TestCase("origin", "release-2.0.0", "2.1.0-alpha.0")] + [TestCase("custom", "release-2.0.0", "0.1.0-alpha.5")] + [TestCase("origin", "release/3.0.0", "3.1.0-alpha.0")] + [TestCase("custom", "release/3.0.0", "0.1.0-alpha.5")] + public void EnsureRemoteReleaseBranchesAreTracked(string origin, string branchName, string expectedVersion) + { + using var fixture = new RemoteRepositoryFixture("develop"); + + fixture.CreateBranch(branchName); + fixture.MakeACommit(); + + if (origin != "origin") fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", origin); + fixture.LocalRepositoryFixture.Fetch(origin); + fixture.LocalRepositoryFixture.Checkout("develop"); + + fixture.LocalRepositoryFixture.AssertFullSemver(expectedVersion); + } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/RepositoryFixtureExtensions.cs b/src/GitVersion.Core.Tests/IntegrationTests/RepositoryFixtureExtensions.cs new file mode 100644 index 0000000000..ec4b304788 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/RepositoryFixtureExtensions.cs @@ -0,0 +1,25 @@ +using GitVersion.Extensions; + +namespace GitVersion.Core.Tests.IntegrationTests; + +internal static class RepositoryFixtureExtensions +{ + public static void MakeACommit(this RepositoryFixtureBase fixture, string commitMsg) + { + fixture.Repository.MakeACommit(commitMsg); + var diagramBuilder = (StringBuilder?)typeof(SequenceDiagram) + .GetField("diagramBuilder", BindingFlags.Instance | BindingFlags.NonPublic) + ?.GetValue(fixture.SequenceDiagram); + + string? GetParticipant(string participant) => + (string?)typeof(SequenceDiagram).GetMethod("GetParticipant", BindingFlags.Instance | BindingFlags.NonPublic) + ?.Invoke(fixture.SequenceDiagram, + [ + participant + ]); + + var participant = GetParticipant(fixture.Repository.Head.FriendlyName); + if (participant != null) + diagramBuilder?.AppendLineFormat("{0} -> {0}: Commit '{1}'", participant, commitMsg); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/SemVerOfAFeatureBranchStartedFromAReleaseBranchGetsDecrementedScenario.cs b/src/GitVersion.Core.Tests/IntegrationTests/SemVerOfAFeatureBranchStartedFromAReleaseBranchGetsDecrementedScenario.cs new file mode 100644 index 0000000000..b150e366b6 --- /dev/null +++ b/src/GitVersion.Core.Tests/IntegrationTests/SemVerOfAFeatureBranchStartedFromAReleaseBranchGetsDecrementedScenario.cs @@ -0,0 +1,31 @@ +namespace GitVersion.Core.Tests.IntegrationTests; + +/// +/// [Bug] SemVer of a feature branch started from a release branch gets decremented #3151 +/// +[TestFixture] +public class SemVerOfAFeatureBranchStartedFromAReleaseBranchGetsDecrementedScenario +{ + [Test] + public void ShouldPickUpReleaseVersionAfterCreatedFromRelease() + { + using var fixture = new EmptyRepositoryFixture(); + + // Create develop and a release branch + fixture.MakeATaggedCommit("1.0.0"); + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.BranchTo("release/1.1.0"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-beta.1+2"); + + // Create a feature branch from the release/1.1.0 branch + fixture.BranchTo("feature/test"); + fixture.MakeACommit(); + + // ✅ succeeds as expected + fixture.AssertFullSemver("1.1.0-test.1+3"); + } +} diff --git a/src/GitVersion.Core.Tests/IntegrationTests/SupportBranchScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/SupportBranchScenarios.cs index d0706e436b..284077f656 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/SupportBranchScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/SupportBranchScenarios.cs @@ -1,7 +1,6 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -13,42 +12,42 @@ public void SupportIsCalculatedCorrectly() { using var fixture = new EmptyRepositoryFixture(); // Start at 1.0.0 - fixture.Repository.MakeACommit(); - fixture.Repository.ApplyTag("1.1.0"); + fixture.MakeACommit(); + fixture.ApplyTag("1.1.0"); // Create 2.0.0 release - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("release-2.0.0")); + fixture.BranchTo("release-2.0.0"); fixture.Repository.MakeCommits(2); // Merge into develop and main - Commands.Checkout(fixture.Repository, MainBranch); - fixture.Repository.MergeNoFF("release-2.0.0"); - fixture.Repository.ApplyTag("2.0.0"); + fixture.Checkout(MainBranch); + fixture.MergeNoFF("release-2.0.0"); + fixture.ApplyTag("2.0.0"); fixture.AssertFullSemver("2.0.0"); // Now lets support 1.x release - Commands.Checkout(fixture.Repository, "1.1.0"); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("support/1.0.0")); + fixture.Checkout("1.1.0"); + fixture.BranchTo("support/1.0.0"); fixture.AssertFullSemver("1.1.0"); // Create release branch from support branch - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("release/1.2.0")); - fixture.Repository.MakeACommit(); + fixture.BranchTo("release/1.2.0"); + fixture.MakeACommit(); fixture.AssertFullSemver("1.2.0-beta.1+1"); // Create 1.2.0 release Commands.Checkout(fixture.Repository, "support/1.0.0"); fixture.Repository.MergeNoFF("release/1.2.0"); - fixture.AssertFullSemver("1.2.0+0"); + fixture.AssertFullSemver("1.2.0-2"); fixture.Repository.ApplyTag("1.2.0"); // Create 1.2.1 hotfix - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("hotfix/1.2.1")); - fixture.Repository.MakeACommit(); + fixture.BranchTo("hotfix/1.2.1"); + fixture.MakeACommit(); fixture.AssertFullSemver("1.2.1-beta.1+1"); - Commands.Checkout(fixture.Repository, "support/1.0.0"); - fixture.Repository.MergeNoFF("hotfix/1.2.1"); - fixture.AssertFullSemver("1.2.1+2"); + fixture.Checkout("support/1.0.0"); + fixture.MergeNoFF("hotfix/1.2.1"); + fixture.AssertFullSemver("1.2.1-2"); } [Test] @@ -69,33 +68,39 @@ public void WhenSupportIsBranchedAndTaggedFromAnotherSupportEnsureNewMinorIsUsed fixture.Repository.MakeACommit(); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("1.3.1+2"); + fixture.AssertFullSemver("1.3.1-2"); } [Test] public void WhenSupportIsBranchedFromMainWithSpecificTag() { + var configuration = GitFlowConfigurationBuilder.New.Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("0.1.0+0"); - fixture.Repository.ApplyTag("1.4.0-rc"); - fixture.Repository.MakeACommit(); - fixture.Repository.CreateBranch("support/1"); - Commands.Checkout(fixture.Repository, "support/1"); - fixture.AssertFullSemver("1.4.0+1"); + fixture.MakeACommit(); + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.ApplyTag("1.4.0-rc"); + fixture.MakeACommit(); + fixture.BranchTo("support/1"); + + fixture.AssertFullSemver("1.4.0-2", configuration); } [Test] public void WhenSupportIsBranchedFromMainWithSpecificTagOnCommit() { + var configuration = GitFlowConfigurationBuilder.New.Build(); + using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("0.1.0+0"); - fixture.Repository.ApplyTag("1.4.0-rc"); - fixture.Repository.CreateBranch("support/1"); - Commands.Checkout(fixture.Repository, "support/1"); - fixture.AssertFullSemver("1.4.0"); + fixture.MakeACommit(); + fixture.AssertFullSemver("0.0.1-1", configuration); + + fixture.ApplyTag("1.4.0-rc"); + fixture.BranchTo("support/1"); + + fixture.AssertFullSemver("1.4.0-1", configuration); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/SwitchingToGitFlowScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/SwitchingToGitFlowScenarios.cs index 6f8fd6fce9..8a5cb57179 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/SwitchingToGitFlowScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/SwitchingToGitFlowScenarios.cs @@ -1,7 +1,5 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -13,7 +11,7 @@ public void WhenDevelopBranchedFromMainWithLegacyVersionTagsDevelopCanUseReachab { using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeCommits(5); - fixture.Repository.MakeATaggedCommit("1.0.0.0"); + fixture.Repository.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeCommits(2); Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); fixture.AssertFullSemver("1.1.0-alpha.2"); diff --git a/src/GitVersion.Core.Tests/IntegrationTests/TagCheckoutScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/TagCheckoutScenarios.cs index 6a1cc117fc..fbb56eb558 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/TagCheckoutScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/TagCheckoutScenarios.cs @@ -1,6 +1,4 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; diff --git a/src/GitVersion.Core.Tests/IntegrationTests/VersionBumpingScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/VersionBumpingScenarios.cs index c119fbefbd..5279dbaaf6 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/VersionBumpingScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/VersionBumpingScenarios.cs @@ -1,9 +1,7 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -11,27 +9,18 @@ namespace GitVersion.Core.Tests.IntegrationTests; public class VersionBumpingScenarios : TestBase { [Test] - public void AppliedPrereleaseTagCausesBump() + public void AppliedPreReleaseLabelCausesBump() { - var configuration = new Config - { - Branches = - { - { - MainBranch, new BranchConfig - { - Tag = "pre", - SourceBranches = new HashSet() - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch(MainBranch, builder => builder.WithLabel("pre").WithSourceBranches()) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit(); fixture.Repository.MakeATaggedCommit("1.0.0-pre.1"); fixture.Repository.MakeACommit(); - fixture.AssertFullSemver("1.0.0-pre.2+1", configuration); + fixture.AssertFullSemver("1.0.0-pre.2", configuration); } [Test] @@ -42,11 +31,11 @@ public void CanUseCommitMessagesToBumpVersion() fixture.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeACommit("+semver:minor"); - fixture.AssertFullSemver("1.1.0+1"); + fixture.AssertFullSemver("1.1.0-1"); fixture.Repository.MakeACommit("+semver:major"); - fixture.AssertFullSemver("2.0.0+2"); + fixture.AssertFullSemver("2.0.0-2"); } [Test] @@ -57,13 +46,13 @@ public void CanUseCommitMessagesToBumpVersion_TagTakesPriority() repo.MakeATaggedCommit("1.0.0"); repo.MakeACommit("+semver:major"); - fixture.AssertFullSemver("2.0.0+1"); + fixture.AssertFullSemver("2.0.0-1"); repo.ApplyTag("1.1.0"); fixture.AssertFullSemver("1.1.0"); repo.MakeACommit(); - fixture.AssertFullSemver("1.1.1+1"); + fixture.AssertFullSemver("1.1.1-1"); } [Theory] @@ -90,19 +79,17 @@ public void CanUseCommitMessagesToBumpVersion_TagTakesPriority() [TestCase("feat: Major update\n\nSome descriptive text\nWith a second line\n\nBREAKING CHANGE: A reason", "2.0.0")] public void CanUseConventionalCommitsToBumpVersion(string commitMessage, string expectedVersion) { - var configuration = new Config - { - VersioningMode = VersioningMode.Mainline, - + var configuration = GitFlowConfigurationBuilder.New // For future debugging of this regex: https://regex101.com/r/CRoBol/2 - MajorVersionBumpMessage = "^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)", - + .WithMajorVersionBumpMessage("^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?(!:|:.*\\n\\n((.+\\n)+\\n)?BREAKING CHANGE:\\s.+)") // For future debugging of this regex: https://regex101.com/r/9ccNam/3 - MinorVersionBumpMessage = "^(feat)(\\([\\w\\s-]*\\))?:", - + .WithMinorVersionBumpMessage("^(feat)(\\([\\w\\s-]*\\))?:") // For future debugging of this regex: https://regex101.com/r/oFpqxA/2 - PatchVersionBumpMessage = "^(build|chore|ci|docs|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?:" - }; + .WithPatchVersionBumpMessage("^(build|chore|ci|docs|fix|perf|refactor|revert|style|test)(\\([\\w\\s-]*\\))?:") + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", builder => builder.WithDeploymentMode(DeploymentMode.ContinuousDeployment)) + .Build(); + using var fixture = new EmptyRepositoryFixture(); fixture.Repository.MakeACommit(); fixture.MakeATaggedCommit("1.0.0"); @@ -118,7 +105,7 @@ public void CanUseCommitMessagesToBumpVersionBaseVersionTagIsAppliedToSameCommit fixture.Repository.MakeACommit(); fixture.MakeATaggedCommit("1.0.0"); fixture.Repository.MakeACommit("+semver:minor"); - fixture.AssertFullSemver("1.1.0+1"); + fixture.AssertFullSemver("1.1.0-1"); fixture.ApplyTag("2.0.0"); @@ -126,6 +113,6 @@ public void CanUseCommitMessagesToBumpVersionBaseVersionTagIsAppliedToSameCommit // Default bump is patch - fixture.AssertFullSemver("2.0.1+1"); + fixture.AssertFullSemver("2.0.1-1"); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs index 33ac445def..cf67eefaeb 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/VersionInCurrentBranchNameScenarios.cs @@ -1,8 +1,6 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -15,7 +13,7 @@ public void TakesVersionFromNameOfReleaseBranch() using var fixture = new BaseGitFlowRepositoryFixture("1.0.0"); fixture.BranchTo("release/2.0.0"); - fixture.AssertFullSemver("2.0.0-beta.1+0"); + fixture.AssertFullSemver("2.0.0-beta.1+1"); } [Test] @@ -30,15 +28,14 @@ public void DoesNotTakeVersionFromNameOfNonReleaseBranch() [Test] public void TakesVersionFromNameOfBranchThatIsReleaseByConfig() { - var config = new Config - { - Branches = new Dictionary { { "support", new BranchConfig { IsReleaseBranch = true } } } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("support", builder => builder.WithIsReleaseBranch(true)) + .Build(); using var fixture = new BaseGitFlowRepositoryFixture("1.0.0"); fixture.BranchTo("support/2.0.0"); - fixture.AssertFullSemver("2.0.0+1", config); + fixture.AssertFullSemver("2.0.0-1", configuration); } [Test] @@ -47,11 +44,11 @@ public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin() using var fixture = new RemoteRepositoryFixture(); fixture.BranchTo("release/2.0.0"); fixture.MakeACommit(); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, [], new(), null); fixture.LocalRepositoryFixture.Checkout("origin/release/2.0.0"); - fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+1"); + fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-beta.1+6"); } [Test] @@ -61,10 +58,10 @@ public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote() fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", "upstream"); fixture.BranchTo("release/2.0.0"); fixture.MakeACommit(); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, [], new(), null); fixture.LocalRepositoryFixture.Checkout("upstream/release/2.0.0"); - fixture.LocalRepositoryFixture.AssertFullSemver("0.1.0-beta.1+5"); + fixture.LocalRepositoryFixture.AssertFullSemver("0.0.1-upstream-release-2-0-0.1+6"); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs index fe026c9d13..77fd5129a2 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/VersionInMergedBranchNameScenarios.cs @@ -1,8 +1,6 @@ -using GitTools.Testing; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; using LibGit2Sharp; -using NUnit.Framework; namespace GitVersion.Core.Tests.IntegrationTests; @@ -28,18 +26,32 @@ public void DoesNotTakeVersionFromNameOfNonReleaseBranch() fixture.AssertFullSemver("1.1.0-alpha.5"); } + [TestCase("release")] + [TestCase("hotfix")] + public void DoesNotTakeVersionFromBranchWithAccidentalVersion(string branch) + { + using var fixture = new EmptyRepositoryFixture(); + + fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo($"{branch}/downgrade-some-lib-to-3.2.1"); + fixture.MakeACommit(); + fixture.Checkout("main"); + fixture.MergeNoFF($"{branch}/downgrade-some-lib-to-3.2.1"); + + fixture.AssertFullSemver("1.0.1-2"); + } + [Test] public void TakesVersionFromNameOfBranchThatIsReleaseByConfig() { - var config = new Config - { - Branches = new Dictionary { { "support", new BranchConfig { IsReleaseBranch = true } } } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("support", builder => builder.WithIsReleaseBranch(true)) + .Build(); using var fixture = new BaseGitFlowRepositoryFixture("1.0.0"); fixture.CreateAndMergeBranchIntoDevelop("support/2.0.0"); - fixture.AssertFullSemver("2.1.0-alpha.2", config); + fixture.AssertFullSemver("2.1.0-alpha.2", configuration); } [Test] @@ -48,11 +60,11 @@ public void TakesVersionFromNameOfRemoteReleaseBranchInOrigin() using var fixture = new RemoteRepositoryFixture(); fixture.BranchTo("release/2.0.0"); fixture.MakeACommit(); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, [], new(), null); fixture.LocalRepositoryFixture.MergeNoFF("origin/release/2.0.0"); - fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0+0"); + fixture.LocalRepositoryFixture.AssertFullSemver("2.0.0-7"); } [Test] @@ -62,11 +74,11 @@ public void DoesNotTakeVersionFromNameOfRemoteReleaseBranchInCustomRemote() fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", "upstream"); fixture.BranchTo("release/2.0.0"); fixture.MakeACommit(); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + fixture.LocalRepositoryFixture.Fetch("upstream"); fixture.LocalRepositoryFixture.MergeNoFF("upstream/release/2.0.0"); - fixture.LocalRepositoryFixture.AssertFullSemver("0.1.0+6"); + fixture.LocalRepositoryFixture.AssertFullSemver("0.0.1-7"); } } diff --git a/src/GitVersion.Core.Tests/IntegrationTests/VersionInTagScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/VersionInTagScenarios.cs index 0253a5ac5f..f03603c417 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/VersionInTagScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/VersionInTagScenarios.cs @@ -1,10 +1,5 @@ -using GitTools.Testing; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; @@ -15,17 +10,14 @@ internal class VersionInTagScenarios public void TagPreReleaseWeightIsNotConfigured_HeadIsATaggedCommit_WeightedPreReleaseNumberShouldBeTheDefaultValue() { // Arrange - var config = new ConfigurationBuilder() - .Add(new Config - { - AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}" - }) + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyFileVersioningFormat("{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}") .Build(); // Act - using var fixture = new BaseGitFlowRepositoryFixture("1.0.0"); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeATaggedCommit("1.1.0"); - var version = fixture.GetVersion(config); + var version = fixture.GetVersion(configuration); // Assert version.AssemblySemFileVer.ShouldBe("1.1.0.60000"); @@ -35,18 +27,15 @@ public void TagPreReleaseWeightIsNotConfigured_HeadIsATaggedCommit_WeightedPreRe public void TagPreReleaseWeightIsConfigured_HeadIsATaggedCommit_WeightedPreReleaseNumberShouldBeTheSameAsTheTagPreReleaseWeight() { // Arrange - var config = new ConfigurationBuilder() - .Add(new Config - { - AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", - TagPreReleaseWeight = 65535 - }) + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyFileVersioningFormat("{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}") + .WithTagPreReleaseWeight(65535) .Build(); // Act - using var fixture = new BaseGitFlowRepositoryFixture("1.0.0"); + using var fixture = new EmptyRepositoryFixture(); fixture.MakeATaggedCommit("1.1.0"); - var version = fixture.GetVersion(config); + var version = fixture.GetVersion(configuration); // Assert version.AssemblySemFileVer.ShouldBe("1.1.0.65535"); @@ -56,13 +45,9 @@ public void TagPreReleaseWeightIsConfigured_HeadIsATaggedCommit_WeightedPreRelea public void TagPreReleaseWeightIsConfigured_GitFlowReleaseIsFinished_WeightedPreReleaseNumberShouldBeTheSameAsTheTagPreReleaseWeight() { // Arrange - var config = new ConfigurationBuilder() - .Add(new Config - { - AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", - TagPreReleaseWeight = 65535, - VersioningMode = VersioningMode.ContinuousDeployment - }) + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyFileVersioningFormat("{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}") + .WithTagPreReleaseWeight(65535) .Build(); // Act @@ -73,9 +58,12 @@ public void TagPreReleaseWeightIsConfigured_GitFlowReleaseIsFinished_WeightedPre fixture.MakeACommit("Feature commit 1"); fixture.BranchTo("release/1.1.0"); fixture.MakeACommit("Release commit 1"); - fixture.AssertFullSemver("1.1.0-beta.1", config); + fixture.AssertFullSemver("1.1.0-beta.1+3", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("release/1.1.0"); fixture.ApplyTag("1.1.0"); - var version = fixture.GetVersion(config); + var version = fixture.GetVersion(configuration); // Assert version.AssemblySemFileVer.ShouldBe("1.1.0.65535"); @@ -85,12 +73,8 @@ public void TagPreReleaseWeightIsConfigured_GitFlowReleaseIsFinished_WeightedPre public void TagPreReleaseWeightIsNotConfigured_GitFlowReleaseIsFinished_WeightedPreReleaseNumberShouldBeTheDefaultValue() { // Arrange - var config = new ConfigurationBuilder() - .Add(new Config - { - AssemblyFileVersioningFormat = "{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}", - VersioningMode = VersioningMode.ContinuousDeployment - }) + var configuration = GitFlowConfigurationBuilder.New + .WithAssemblyFileVersioningFormat("{Major}.{Minor}.{Patch}.{WeightedPreReleaseNumber}") .Build(); // Act @@ -101,9 +85,12 @@ public void TagPreReleaseWeightIsNotConfigured_GitFlowReleaseIsFinished_Weighted fixture.MakeACommit("Feature commit 1"); fixture.BranchTo("release/1.1.0"); fixture.MakeACommit("Release commit 1"); - fixture.AssertFullSemver("1.1.0-beta.1", config); + fixture.AssertFullSemver("1.1.0-beta.1+3", configuration); + + fixture.Checkout("main"); + fixture.MergeNoFF("release/1.1.0"); fixture.ApplyTag("1.1.0"); - var version = fixture.GetVersion(config); + var version = fixture.GetVersion(configuration); // Assert version.AssemblySemFileVer.ShouldBe("1.1.0.60000"); diff --git a/src/GitVersion.Core.Tests/IntegrationTests/WorktreeScenarios.cs b/src/GitVersion.Core.Tests/IntegrationTests/WorktreeScenarios.cs index c5b66e8055..32a1c2b4f3 100644 --- a/src/GitVersion.Core.Tests/IntegrationTests/WorktreeScenarios.cs +++ b/src/GitVersion.Core.Tests/IntegrationTests/WorktreeScenarios.cs @@ -1,19 +1,13 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.IntegrationTests; [TestFixture] public class WorktreeScenarios : TestBase { - [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UseWorktreeRepositoryForVersion() { using var fixture = new EmptyRepositoryFixture(); @@ -29,8 +23,7 @@ public void UseWorktreeRepositoryForVersion() fixture.AssertFullSemver("2.0.0"); fixture.Repository.Worktrees.Add(branchV1.CanonicalName, "1.0", worktreePath, false); - using var worktreeFixture = new LocalRepositoryFixture(new Repository(worktreePath)); + using var worktreeFixture = new LocalRepositoryFixture(new(worktreePath)); worktreeFixture.AssertFullSemver("1.0.0"); } - } diff --git a/src/GitVersion.Core.Tests/Logging/LoggerTest.cs b/src/GitVersion.Core.Tests/Logging/LoggerTest.cs index 4c1d4129cb..e0e1ccdeaa 100644 --- a/src/GitVersion.Core.Tests/Logging/LoggerTest.cs +++ b/src/GitVersion.Core.Tests/Logging/LoggerTest.cs @@ -1,7 +1,5 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.Logging; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -37,7 +35,7 @@ public void UsernameWithoutPassword() var logAppender = new TestLogAppender(Action); var log = new Log(logAppender); - const string repoUrl = "http://username@workspace.visualstudio.com/DefaultCollection/_git/CAS"; + const string repoUrl = "https://username@workspace.visualstudio.com/DefaultCollection/_git/CAS"; log.Info(repoUrl); diff --git a/src/GitVersion.Core.Tests/Logging/LoggingTests.cs b/src/GitVersion.Core.Tests/Logging/LoggingTests.cs index 72e611b939..9a8b45ab8a 100644 --- a/src/GitVersion.Core.Tests/Logging/LoggingTests.cs +++ b/src/GitVersion.Core.Tests/Logging/LoggingTests.cs @@ -1,5 +1,4 @@ using GitVersion.Logging; -using NUnit.Framework; namespace GitVersion.Core.Tests.Logging; diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitFlow+GivenADevelopBranchWithOneCommitMergedToMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitFlow+GivenADevelopBranchWithOneCommitMergedToMainWhen.cs new file mode 100644 index 0000000000..b6b96cd061 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitFlow+GivenADevelopBranchWithOneCommitMergedToMainWhen.cs @@ -0,0 +1,98 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenADevelopBranchWithOneCommitMergedToMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New.WithLabel(null) + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("develop", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 55 minutes ago (HEAD -> main) + // |\ + // | * 56 minutes ago (develop) + // |/ + // * 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("develop"); + fixture.MakeACommit("B"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-alpha.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-alpha.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-alpha.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-alpha.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.1-alpha.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.2-alpha.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-alpha.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-alpha.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.1.0-alpha.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.1.1-alpha.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.2.0-alpha.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-alpha.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "1.0.0-alpha.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "1.0.1-alpha.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "1.1.0-alpha.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "2.0.0-alpha.1+2")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("develop", b => b.WithIncrement(increment)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("develop", b => b.WithIncrement(increment)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitFlow+GivenADevelopBranchWithOneCommitMergedToMainWhenMergedCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitFlow+GivenADevelopBranchWithOneCommitMergedToMainWhenMergedCommitTaggedAsStable.cs new file mode 100644 index 0000000000..648d69ddba --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitFlow+GivenADevelopBranchWithOneCommitMergedToMainWhenMergedCommitTaggedAsStable.cs @@ -0,0 +1,100 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenADevelopBranchWithOneCommitMergedToMainWhenMergedCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New.WithLabel(null) + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("develop", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 55 minutes ago (tag: 1.0.0, main) + // |\ + // | * 56 minutes ago (HEAD -> develop) + // |/ + // * 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("develop"); + fixture.MakeACommit("B"); + fixture.MergeTo("main"); + fixture.ApplyTag("1.0.0"); + fixture.Checkout("develop"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "1.0.0-alpha.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "1.0.1-alpha.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "1.1.0-alpha.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "2.0.0-alpha.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "1.0.0-alpha.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "1.0.1-alpha.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "1.1.0-alpha.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "2.0.0-alpha.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "1.0.0-alpha.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "1.0.1-alpha.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "1.1.0-alpha.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "2.0.0-alpha.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "1.0.0-alpha.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "1.0.1-alpha.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "1.1.0-alpha.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "2.0.0-alpha.1+0")] + public string GetVersionWithTrackMergeTargetOnDevelop(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("develop", b => b.WithIncrement(increment).WithTrackMergeTarget(true)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-alpha.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-alpha.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-alpha.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-alpha.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.1-alpha.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.2-alpha.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-alpha.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-alpha.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.1.0-alpha.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.1.1-alpha.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.2.0-alpha.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-alpha.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "1.0.0-alpha.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "1.0.1-alpha.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "1.1.0-alpha.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "2.0.0-alpha.1+1")] + public string GetVersionWithNoTrackMergeTargetOnDevelop(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("develop", b => b.WithIncrement(increment).WithTrackMergeTarget(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithAMergeCommitFromMainMergedBackToMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithAMergeCommitFromMainMergedBackToMainWhen.cs new file mode 100644 index 0000000000..87d626b6a4 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithAMergeCommitFromMainMergedBackToMainWhen.cs @@ -0,0 +1,238 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithAMergeCommitFromMainMergedBackToMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New.WithLabel(null) + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 52 minutes ago (HEAD -> main) + // |\ + // | * 53 minutes ago (feature/foo) + // | |\ + // | |/ + // |/| + // C | 54 minutes ago + // | B 56 minutes ago + // |/ + // A 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.Checkout("main"); + fixture.MakeACommit("C"); + fixture.Checkout("main"); + fixture.MergeTo("feature/foo"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+3")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+3")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+3")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+3")] + public string GetVersion(IncrementStrategy increment, IncrementStrategy incrementOnFeature, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .WithBranch("feature", b => b.WithIncrement(incrementOnFeature)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+3")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+3")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.3.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.3.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.3.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.3.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+3")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "3.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "3.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "3.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+3")] + public string GetVersionWithPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy increment, IncrementStrategy incrementOnFeature, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(incrementOnFeature)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithAMergeCommitFromMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithAMergeCommitFromMainWhen.cs new file mode 100644 index 0000000000..a223f6f1be --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithAMergeCommitFromMainWhen.cs @@ -0,0 +1,177 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithAMergeCommitFromMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New.WithLabel(null) + .WithVersionStrategy(VersionStrategies.Mainline) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 53 minutes ago (HEAD -> feature/foo) + // |\ + // | B 54 minutes ago + // C | 56 minutes ago (main) + // |/ + // A 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.Checkout("main"); + fixture.MakeACommit("C"); + fixture.MergeTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, ExpectedResult = "0.0.3-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.2.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.3.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, ExpectedResult = "0.3.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "2.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "2.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "3.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, ExpectedResult = "3.0.0-foo.1+2")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, ExpectedResult = "0.0.3-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.2.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.3.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, ExpectedResult = "0.3.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "2.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "2.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "3.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, ExpectedResult = "3.0.0-foo.1+2")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-foo.3+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, ExpectedResult = "0.0.0-foo.3+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.2-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, ExpectedResult = "0.0.3-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.2.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.2.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.3.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, ExpectedResult = "0.3.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "2.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "2.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "2.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "3.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, ExpectedResult = "3.0.0-foo.1+2")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, ExpectedResult = "0.0.3-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, ExpectedResult = "0.2.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, ExpectedResult = "0.3.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, ExpectedResult = "0.3.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, ExpectedResult = "2.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, ExpectedResult = "2.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, ExpectedResult = "3.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, ExpectedResult = "3.0.0-foo.1+2")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhen.cs new file mode 100644 index 0000000000..b621263a0e --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhen.cs @@ -0,0 +1,490 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMajor.cs new file mode 100644 index 0000000000..e316d139ac --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMajor.cs @@ -0,0 +1,1411 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: major"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMinor.cs new file mode 100644 index 0000000000..726d511f00 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMinor.cs @@ -0,0 +1,1411 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: minor"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessagePatch.cs new file mode 100644 index 0000000000..ac28a234eb --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessagePatch.cs @@ -0,0 +1,1410 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitAHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: patch"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreRelease.cs new file mode 100644 index 0000000000..826cdde4c8 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreRelease.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) (tag 0.0.0-4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-4"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..efd75ff410 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseBar.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) (tag 0.0.0-bar) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-bar"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..6014f1af71 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseFoo.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) (tag 0.0.0-foo.4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-foo.4"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsStable.cs new file mode 100644 index 0000000000..4de1d77ae9 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsStable.cs @@ -0,0 +1,495 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitATaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) (tag 0.0.0) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMajor.cs new file mode 100644 index 0000000000..4d72b021d5 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMajor.cs @@ -0,0 +1,1418 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B +semver: major"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMinor.cs new file mode 100644 index 0000000000..ee1731cda9 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMinor.cs @@ -0,0 +1,1418 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B +semver: minor"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessagePatch.cs new file mode 100644 index 0000000000..fd31f2d6e8 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessagePatch.cs @@ -0,0 +1,1418 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B +semver: patch"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b + .WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreRelease.cs new file mode 100644 index 0000000000..05502b86f9 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreRelease.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) (tag 0.0.0-4) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0-4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..2e90aa8889 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseBar.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) (tag 0.0.0-bar) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0-bar"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..ef0054c150 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseFoo.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) (tag 0.0.0-foo.4) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0-foo.4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsStable.cs new file mode 100644 index 0000000000..3ab135df63 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsStable.cs @@ -0,0 +1,871 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitBranchedFromMainWhenCommitBTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 47 minutes ago (HEAD -> feature/foo) (tag 0.0.0) + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithNoLabelOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithEmptyLabelOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithLabelFooOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithLabelBarOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhen.cs new file mode 100644 index 0000000000..01d13e03f9 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhen.cs @@ -0,0 +1,958 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitMergedToMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 54 minutes ago (HEAD -> main) + // |\ + // | B 56 minutes ago (feature/foo) + // |/ + // A 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreRelease.cs new file mode 100644 index 0000000000..b19f8c64a8 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreRelease.cs @@ -0,0 +1,952 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + fixture = new EmptyRepositoryFixture(); + + // * 54 minutes ago (HEAD -> main) + // |\ + // | B 56 minutes ago (feature/foo) (tag 0.0.0-4) + // |/ + // A 58 minutes ago + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0-4"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-5+1")] + + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..a11ab72d0a --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseBar.cs @@ -0,0 +1,951 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + fixture = new EmptyRepositoryFixture(); + + // * 55 minutes ago (HEAD -> main) + // |\ + // | B 56 minutes ago (feature/foo) (tag 0.0.0-bar) + // |/ + // A 58 minutes ago + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0-bar"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar+1")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..300eb4e00c --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseFoo.cs @@ -0,0 +1,951 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + fixture = new EmptyRepositoryFixture(); + + // * 55 minutes ago (HEAD -> main) + // |\ + // | B 56 minutes ago (feature/foo) (tag 0.0.0-foo.4) + // |/ + // A 58 minutes ago + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0-foo.4"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+2")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+1")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-bar.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-bar.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-bar.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+2")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsStable.cs new file mode 100644 index 0000000000..5ceace138e --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsStable.cs @@ -0,0 +1,951 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitMergedToMainWhenCommitBTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + fixture = new EmptyRepositoryFixture(); + + // * 55 minutes ago (HEAD -> main) + // |\ + // | B 56 minutes ago (feature/foo) (tag 0.0.0) + // |/ + // A 58 minutes ago + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.0.0"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-1+1")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+1")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.1+1")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-bar.1+1")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-bar.1+1")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWithOneCommitBranchedToFeatureWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWithOneCommitBranchedToFeatureWhen.cs new file mode 100644 index 0000000000..a00b118d9a --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitMergedToMainWithOneCommitBranchedToFeatureWhen.cs @@ -0,0 +1,963 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitMergedToMainWithOneCommitBranchedToFeatureWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 53 minutes ago (HEAD -> feature/foo) (main) + // |\ + // C | 54 minutes ago + // | B 56 minutes ago + // |/ + // A 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.Checkout("main"); + fixture.MakeACommit("C"); + fixture.Checkout("feature/foo"); + fixture.MergeTo("main", removeBranchAfterMerging: true); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.2-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.2-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.2.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.2-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.2-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.2.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.2-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithLabelNullOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.3.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.3.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "3.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "3.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "3.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.3.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.3.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "3.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "3.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "3.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.3.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "3.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.3.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.3.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "3.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "3.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "3.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.3.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "3.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.2-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.2-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.2.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.2-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.2-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.2.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.2-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.3.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.3.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "3.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "3.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "3.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.3.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.3.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "3.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "3.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "3.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.3.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "3.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "3.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.2-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.2-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.2.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.2-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.3.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "3.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.3.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "3.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "3.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.3.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "3.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.3.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "3.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "3.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.3.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "3.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.2-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.2-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.2-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.2.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.3+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.3+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.2-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.3+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.2-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.3.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.3.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "3.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "3.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "3.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.3.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.4.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "3.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "3.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "4.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "4.0.0-1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "4.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.4+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.3.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.3.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.4.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "3.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "3.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "3.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "4.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "4.0.0-bar.1+0")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.3.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.4.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "3.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "3.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "4.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhen.cs new file mode 100644 index 0000000000..cdd2e25d5a --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhen.cs @@ -0,0 +1,60 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMajor.cs new file mode 100644 index 0000000000..7ee8bc6e68 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMajor.cs @@ -0,0 +1,118 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A +semver: major"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMinor.cs new file mode 100644 index 0000000000..75e2ae6018 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMinor.cs @@ -0,0 +1,118 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A +semver: minor"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessagePatch.cs new file mode 100644 index 0000000000..e8dbb2d8ea --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessagePatch.cs @@ -0,0 +1,118 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A +semver: patch"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..c65189358f --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreRelease.cs @@ -0,0 +1,91 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) (tag 0.0.0-4) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-5+0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.0.0-5+0")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithPreventIncrementWhenCurrentCommitTaggedFalse(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..7eab4b4550 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,91 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) (tag 0.0.0-bar) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-bar"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar+0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar+0")] + public string GetVersionWithPreventIncrementWhenCurrentCommitTaggedFalse(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..94a7919769 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,91 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) (tag 0.0.0-foo.4) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-foo.4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.5+0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.5+0")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithPreventIncrementWhenCurrentCommitTaggedFalse(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsStable.cs new file mode 100644 index 0000000000..2a364c6117 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsStable.cs @@ -0,0 +1,91 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithOneCommitWhenCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> feature/foo) (tag 0.0.0) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + public string GetVersionWithPreventIncrementWhenCurrentCommitTaggedFalse(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsBranchedFromMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsBranchedFromMainWhen.cs new file mode 100644 index 0000000000..bbf25713ae --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsBranchedFromMainWhen.cs @@ -0,0 +1,321 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithThreeCommitsBranchedFromMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // D 45 minutes ago (HEAD -> feature/foo) + // C 46 minutes ago + // B 47 minutes ago + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MakeACommit("D"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsMergedToMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsMergedToMainWhen.cs new file mode 100644 index 0000000000..1e60798ead --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsMergedToMainWhen.cs @@ -0,0 +1,962 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithThreeCommitsMergedToMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 54 minutes ago (HEAD -> main) + // |\ + // | D 55 minutes ago (feature/foo) + // | C 56 minutes ago + // | B 57 minutes ago + // |/ + // A 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MakeACommit("D"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + public string GetVersionWithLabelNullOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+4")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-foo.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-foo.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+4")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-bar.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-bar.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-bar.2+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+4")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+4")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsWhen.cs new file mode 100644 index 0000000000..68e261655a --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithThreeCommitsWhen.cs @@ -0,0 +1,66 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithThreeCommitsWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // C 57 minutes ago (HEAD -> feature/foo) + // B 58 minutes ago + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.MakeACommit("C"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsBranchedFromMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsBranchedFromMainWhen.cs new file mode 100644 index 0000000000..ca166148b5 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsBranchedFromMainWhen.cs @@ -0,0 +1,319 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithTwoCommitsBranchedFromMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // C 46 minutes ago (HEAD -> feature/foo) + // B 47 minutes ago + // A 51 minutes ago (main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.MakeACommit("C"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+2")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+2")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsMergedToMainWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsMergedToMainWhen.cs new file mode 100644 index 0000000000..8d53b23842 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsMergedToMainWhen.cs @@ -0,0 +1,960 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithTwoCommitsMergedToMainWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitFlowConfigurationBuilder MainlineBuilder => GitFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // * 54 minutes ago (HEAD -> main) + // |\ + // | C 55 minutes ago (feature/foo) + // | B 56 minutes ago + // |/ + // A 58 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit("B"); + fixture.MakeACommit("C"); + fixture.MergeTo("main"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithLabelNullOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithLabelNullAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-1+3")] + public string GetVersionWithEmptyLabelAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty).WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-foo.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+3")] + public string GetVersionWithLabelFooAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-bar.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-bar.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-bar.2+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+3")] + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-bar.2+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-bar.1+3")] + public string GetVersionWithLabelBarAndPreventIncrementOfMergedBranchVersionFalseOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar").WithPreventIncrementOfMergedBranch(false)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..c46eeb186f --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease.cs @@ -0,0 +1,65 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> feature/foo) + // A 59 minutes ago (tag 0.0.3-4) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-4"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.3-5+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.0.3-5+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+2")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+2")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..ede3f8afe4 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,65 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> feature/foo) + // A 59 minutes ago (tag 0.0.3-bar) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-bar"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.3-bar+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+2")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+2")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+2")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+2")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+2")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.0.3-bar+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..fc3663c8dc --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,65 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAFeatureBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> feature/foo) + // A 59 minutes ago (tag 0.0.3-foo.4) + + fixture = new EmptyRepositoryFixture("feature/foo"); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-foo.4"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.3-foo.5+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+2")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+2")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+2")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+2")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.0.3-foo.5+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+2")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+2")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+2")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+2")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhen.cs new file mode 100644 index 0000000000..5562d917d9 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhen.cs @@ -0,0 +1,489 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMajor.cs new file mode 100644 index 0000000000..0c215481b9 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMajor.cs @@ -0,0 +1,1409 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: major"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMinor.cs new file mode 100644 index 0000000000..5cedf59ec5 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMinor.cs @@ -0,0 +1,1409 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: minor"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessagePatch.cs new file mode 100644 index 0000000000..b66b8ffb39 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessagePatch.cs @@ -0,0 +1,1408 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: patch"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndDisabledMergeMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..e254e99716 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreRelease.cs @@ -0,0 +1,945 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) (tag 0.0.0-4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-4"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..6097fd0e09 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,945 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) (tag 0.0.0-bar) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-bar"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..2721e46e16 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,945 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) (tag 0.0.0-foo.4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-foo.4"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.4")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.5+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsStable.cs new file mode 100644 index 0000000000..faa9aadc69 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsStable.cs @@ -0,0 +1,945 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitBranchedToFeatureWhenCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 58 minutes ago (HEAD -> feature/foo, main) (tag 0.0.0) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMainAndPreventIncrementWhenCurrentCommitTaggedFalseOnFeature( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label).WithPreventIncrementWhenCurrentCommitTagged(false)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhen.cs new file mode 100644 index 0000000000..dbe3587af8 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhen.cs @@ -0,0 +1,60 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMajor.cs new file mode 100644 index 0000000000..f426dff437 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMajor.cs @@ -0,0 +1,118 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: major"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMinor.cs new file mode 100644 index 0000000000..93f5d04efa --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMinor.cs @@ -0,0 +1,118 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: minor"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessagePatch.cs new file mode 100644 index 0000000000..e0b6c322f8 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitHasBumpMessagePatch.cs @@ -0,0 +1,118 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: patch"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..05e18236af --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreRelease.cs @@ -0,0 +1,61 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) (tag 0.0.0-4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-4")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.0.0-4")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.0.0-4")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..dd1d0cb61c --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,61 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) (tag 0.0.0-bar) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-bar"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-bar")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0-bar")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..ead26ad71c --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,61 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) (tag 0.0.0-foo.4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0-foo.4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0-foo.4")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0-foo.4")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsStable.cs new file mode 100644 index 0000000000..f6d1694476 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithOneCommitWhenCommitTaggedAsStable.cs @@ -0,0 +1,61 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithOneCommitWhenCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // A 59 minutes ago (HEAD -> main) (tag 0.0.0) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.0"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.0.0")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.0.0")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.0.0")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithThreeCommitsWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithThreeCommitsWhen.cs new file mode 100644 index 0000000000..5b4f43cc40 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithThreeCommitsWhen.cs @@ -0,0 +1,64 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithThreeCommitsWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // C 57 minutes agov (HEAD -> main) + // B 58 minutes ago + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.MakeACommit("C"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhen.cs new file mode 100644 index 0000000000..88b321480e --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhen.cs @@ -0,0 +1,490 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMajor.cs new file mode 100644 index 0000000000..d5592d078b --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMajor.cs @@ -0,0 +1,1411 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: major"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndDisabledMessageIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "1.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "1.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "1.0.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.0.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "1.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "1.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "1.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "1.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "1.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "1.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "1.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "1.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndDisabledMessageIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMinor.cs new file mode 100644 index 0000000000..117d580522 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMinor.cs @@ -0,0 +1,1411 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: minor"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.1-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndDisabledMessageIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.1.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.1.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.1.1-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.1.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.1.2-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndDisabledMessageIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessagePatch.cs new file mode 100644 index 0000000000..92669b7ab4 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessagePatch.cs @@ -0,0 +1,1411 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: patch"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndDisabledMessageIncrementingOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelAndMergeMessageOnlyIncrementingOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelAndDisabledMessageIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + + public string GetVersionWithEmptyLabelAndMergeMessageOnlyIncrementingOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndDisabledMessageIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooAndMergeMessageOnlyIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.1-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.1-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.1-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndDisabledMessageIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.1-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.1-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.0-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.1-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.0-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.2-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.2-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.2-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarAndMergeMessageOnlyIncrementModeOnMain( + IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar") + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..5caadaeb23 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreRelease.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago (0.0.3-4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-4"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..54058188ef --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago (0.0.3-bar) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-bar"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.3+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.2.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.3.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "2.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "2.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "3.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..44ddb5faa0 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago (0.0.3-foo.4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-foo.4"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.6+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.6+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.6+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.3+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.2.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.3.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.3.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "2.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "2.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "3.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "2.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "2.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "2.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "3.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsStable.cs new file mode 100644 index 0000000000..b84caf36fc --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsStable.cs @@ -0,0 +1,491 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsBranchedToFeatureWhenFirstCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)) + .WithBranch("feature", b => b + .WithDeploymentMode(DeploymentMode.ManualDeployment).WithPreventIncrementWhenCurrentCommitTagged(true) + ); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 54 minutes ago (main) (HEAD -> feature/foo) + // A 56 minutes ago (0.0.3) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("B"); + fixture.BranchTo("feature/foo"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithNoLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(null)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithEmptyLabelOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel(string.Empty)) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.2+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelFooOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("foo")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.3-1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.3-bar.2+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.None, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.3-foo.1+0")] + + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, null, ExpectedResult = "0.0.4-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, null, ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, null, ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "", ExpectedResult = "0.0.4-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "", ExpectedResult = "0.0.5-1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "foo", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "bar", ExpectedResult = "0.0.4-bar.2+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.0.5-bar.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.0.4-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Patch, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.0.5-foo.1+0")] + + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, null, ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, null, ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "", ExpectedResult = "0.2.0-1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "foo", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "bar", ExpectedResult = "0.2.0-bar.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.None, "{BranchName}", ExpectedResult = "0.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "0.1.1-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Minor, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "0.2.0-foo.1+0")] + + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, null, ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, null, ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "", ExpectedResult = "2.0.0-1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "foo", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "bar", ExpectedResult = "2.0.0-bar.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.None, "{BranchName}", ExpectedResult = "1.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Patch, "{BranchName}", ExpectedResult = "1.0.1-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Minor, "{BranchName}", ExpectedResult = "1.1.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Major, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + [TestCase(IncrementStrategy.Major, IncrementStrategy.Inherit, "{BranchName}", ExpectedResult = "2.0.0-foo.1+0")] + public string GetVersionWithLabelBarOnMain(IncrementStrategy incrementOnMain, IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(incrementOnMain).WithLabel("bar")) + .WithBranch("feature", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhen.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhen.cs new file mode 100644 index 0000000000..5ab2e54ec2 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhen.cs @@ -0,0 +1,62 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhen + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMajor.cs new file mode 100644 index 0000000000..37abd564e6 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMajor.cs @@ -0,0 +1,120 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: major"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "1.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "1.0.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "1.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "1.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "1.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMinor.cs new file mode 100644 index 0000000000..c8066c87ef --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMinor.cs @@ -0,0 +1,120 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: minor"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.1.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.1.1-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.1-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.1-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessagePatch.cs new file mode 100644 index 0000000000..df68d760c6 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessagePatch.cs @@ -0,0 +1,120 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A +semver: patch"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.1-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..faf3b55295 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago (tag 0.0.3-4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-4"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-5+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..5a55b2ee16 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago (tag 0.0.3-bar) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-bar"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-bar+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-bar+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..89e4c715aa --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago (tag 0.0.3-foo.4) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3-foo.4"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-foo.1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.5+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsStable.cs new file mode 100644 index 0000000000..05b4a99d93 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsStable.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenFirstCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago (tag 0.0.3) + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.ApplyTag("0.0.3"); + fixture.MakeACommit("B"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.3-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.4-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.3-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.4-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "1.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.3-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.4-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "1.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.3-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.4-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "1.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMajor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMajor.cs new file mode 100644 index 0000000000..333dc9c0e8 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMajor.cs @@ -0,0 +1,120 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMajor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B +semver: major"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "1.0.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "1.0.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "1.0.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMinor.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMinor.cs new file mode 100644 index 0000000000..5e94901177 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMinor.cs @@ -0,0 +1,120 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessageMinor + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B +semver: minor"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.1.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.1.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.1.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessagePatch.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessagePatch.cs new file mode 100644 index 0000000000..540b8fce7e --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessagePatch.cs @@ -0,0 +1,120 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitHasBumpMessagePatch + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B +semver: patch"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.1-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.1-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.1-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithDisabledMessageIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.Disabled) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.0.0-2+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.0.2-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.0.0-foo.2+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.0.2-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.0.0-bar.2+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.0.2-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersionWithMergeMessageOnlyIncrementing(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label) + .WithCommitMessageIncrementing(CommitMessageIncrementMode.MergeMessageOnly) + ).Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreRelease.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreRelease.cs new file mode 100644 index 0000000000..ad884f4653 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreRelease.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreRelease + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) (tag 0.2.0-4) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.2.0-4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.2.0-4")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-4")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-4")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.2.0-4")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.2.0-4")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-4")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-4")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.2.0-4")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseBar.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseBar.cs new file mode 100644 index 0000000000..3f72569f57 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseBar.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseBar + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) (tag 0.2.0-bar) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.2.0-bar"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.2.0-bar")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-bar")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-bar")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.2.0-bar")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.1+1")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "2.0.0-foo.1+1")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.2.0-bar")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseFoo.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseFoo.cs new file mode 100644 index 0000000000..97d8d78a1c --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseFoo.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsPreReleaseFoo + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) (tag 0.2.0-foo.4) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.2.0-foo.4"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.2.0-foo.4")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.2.0-foo.4")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0-foo.4")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.2.0-foo.4")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0-1+1")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "2.0.0-1+1")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.2.0-foo.4")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0-foo.4")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0-foo.4")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.2.0-foo.4")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0-bar.1+1")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "2.0.0-bar.1+1")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsStable.cs b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsStable.cs new file mode 100644 index 0000000000..2072e5f8c6 --- /dev/null +++ b/src/GitVersion.Core.Tests/Mainline/MainlineScenariosWithAGitHubFlow+GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsStable.cs @@ -0,0 +1,63 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests; +using GitVersion.Core.Tests.IntegrationTests; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Mainline; + +internal partial class MainlineScenariosWithAGitHubFlow +{ + [Parallelizable(ParallelScope.All)] + public class GivenAMainBranchWithTwoCommitsWhenSecondCommitTaggedAsStable + { + private EmptyRepositoryFixture? fixture; + + private static GitHubFlowConfigurationBuilder MainlineBuilder => GitHubFlowConfigurationBuilder.New + .WithVersionStrategy(VersionStrategies.Mainline).WithLabel(null) + .WithBranch("main", b => b.WithDeploymentMode(DeploymentMode.ManualDeployment)); + + [OneTimeSetUp] + public void OneTimeSetUp() + { + // B 58 minutes ago (HEAD -> main) (tag 0.2.0) + // A 59 minutes ago + + fixture = new EmptyRepositoryFixture(); + + fixture.MakeACommit("A"); + fixture.MakeACommit("B"); + fixture.ApplyTag("0.2.0"); + } + + [OneTimeTearDown] + public void OneTimeTearDown() => fixture?.Dispose(); + + [TestCase(IncrementStrategy.None, null, ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Patch, null, ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Minor, null, ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Major, null, ExpectedResult = "0.2.0")] + + [TestCase(IncrementStrategy.None, "", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Patch, "", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Minor, "", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Major, "", ExpectedResult = "0.2.0")] + + [TestCase(IncrementStrategy.None, "foo", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Patch, "foo", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Minor, "foo", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Major, "foo", ExpectedResult = "0.2.0")] + + [TestCase(IncrementStrategy.None, "bar", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Patch, "bar", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Minor, "bar", ExpectedResult = "0.2.0")] + [TestCase(IncrementStrategy.Major, "bar", ExpectedResult = "0.2.0")] + public string GetVersion(IncrementStrategy increment, string? label) + { + IGitVersionConfiguration mainline = MainlineBuilder + .WithBranch("main", b => b.WithIncrement(increment).WithLabel(label)) + .Build(); + + return fixture!.GetVersion(mainline).FullSemVer; + } + } +} diff --git a/src/GitVersion.Core.Tests/Model/MergeMessageTests.cs b/src/GitVersion.Core.Tests/MergeMessageTests.cs similarity index 63% rename from src/GitVersion.Core.Tests/Model/MergeMessageTests.cs rename to src/GitVersion.Core.Tests/MergeMessageTests.cs index 9d441619db..546355d2b6 100644 --- a/src/GitVersion.Core.Tests/Model/MergeMessageTests.cs +++ b/src/GitVersion.Core.Tests/MergeMessageTests.cs @@ -1,30 +1,28 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; [TestFixture] public class MergeMessageTests : TestBase { - private readonly Config config = new() { TagPrefix = Config.DefaultTagPrefix }; + private readonly GitFlowConfigurationBuilder configurationBuilder = GitFlowConfigurationBuilder.New; [Test] public void NullMessageStringThrows() => // Act / Assert - Should.Throw(() => new MergeMessage(null, this.config)); + Should.Throw(() => new MergeMessage(null!, this.configurationBuilder.Build())); [TestCase("")] [TestCase("\t\t ")] public void EmptyMessageString(string message) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldBeNull(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -33,33 +31,33 @@ public void EmptyMessageString(string message) [TestCase("")] [TestCase("\t\t ")] [TestCase(null)] - public void EmptyTagPrefix(string prefix) + public void EmptyTagPrefix(string? prefix) { // Arrange const string message = "Updated some code."; - var conf = new Config { TagPrefix = prefix }; + var configuration = GitHubFlowConfigurationBuilder.New.WithTagPrefix(prefix).Build(); // Act - var sut = new MergeMessage(message, conf); + var sut = new MergeMessage(message, configuration); // Assert sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldBeNull(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); } private static readonly object?[] MergeMessages = - { + [ new object?[] { "Merge branch 'feature/one'", "feature/one", null, null }, new object?[] { "Merge branch 'origin/feature/one'", "origin/feature/one", null, null }, new object?[] { $"Merge tag 'v4.0.0' into {MainBranch}", "v4.0.0", MainBranch, new SemanticVersion(4) }, new object?[] { $"Merge tag 'V4.0.0' into {MainBranch}", "V4.0.0", MainBranch, new SemanticVersion(4) }, - new object?[] { "Merge branch 'feature/4.1/one'", "feature/4.1/one", null, new SemanticVersion(4, 1) }, - new object?[] { "Merge branch 'origin/4.1/feature/one'", "origin/4.1/feature/one", null, new SemanticVersion(4, 1) }, + new object?[] { "Merge branch 'feature/4.1.0/one'", "feature/4.1.0/one", null, new SemanticVersion(4, 1) }, + new object?[] { "Merge branch 'origin/4.1.0/feature/one'", "origin/4.1.0/feature/one", null, new SemanticVersion(4, 1) }, new object?[] { $"Merge tag 'v://10.10.10.10' into {MainBranch}", "v://10.10.10.10", MainBranch, null } - }; + ]; [TestCaseSource(nameof(MergeMessages))] public void ParsesMergeMessage( @@ -69,27 +67,26 @@ public void ParsesMergeMessage( SemanticVersion expectedVersion) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("Default"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBe(expectedVersion); } private static readonly object?[] GitHubPullPullMergeMessages = - { - new object?[] { "Merge pull request #1234 from feature/one", "feature/one", null, null, 1234 }, - new object?[] { "Merge pull request #1234 in feature/one", "feature/one", null, null, 1234 }, - new object?[] { "Merge pull request #1234 in v4.0.0", "v4.0.0", null, new SemanticVersion(4), 1234 }, - new object?[] { "Merge pull request #1234 from origin/feature/one", "origin/feature/one", null, null, 1234 }, - new object?[] { "Merge pull request #1234 in feature/4.1/one", "feature/4.1/one", null, new SemanticVersion(4,1), 1234 }, - new object?[] { "Merge pull request #1234 in V://10.10.10.10", "V://10.10.10.10", null, null, 1234 }, - new object?[] { "Merge pull request #1234 from feature/one into dev", "feature/one", "dev", null, 1234 } - }; + [ + new object?[] { "Merge pull request #1234 from organization/feature/one", "feature/one", null, null, 1234 }, + new object?[] { "Merge pull request #1234 in organization/feature/one", "feature/one", null, null, 1234 }, + new object?[] { "Merge pull request #1234 in v4.0.0", "v4.0.0", null, new SemanticVersion(4), 1234 }, + new object?[] { "Merge pull request #1234 in organization/feature/4.1.0/one", "feature/4.1.0/one", null, new SemanticVersion(4, 1), 1234 }, + new object?[] { "Merge pull request #1234 from organization/feature/one into dev", "feature/one", "dev", null, 1234 } + ]; [TestCaseSource(nameof(GitHubPullPullMergeMessages))] public void ParsesGitHubPullMergeMessage( @@ -100,30 +97,31 @@ public void ParsesGitHubPullMergeMessage( int? expectedPullRequestNumber) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("GitHubPull"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); sut.Version.ShouldBe(expectedVersion); } private static readonly object?[] BitBucketPullMergeMessages = - { - new object?[] { "Merge pull request #1234 from feature/one from feature/two to dev", "feature/two", "dev", null, 1234 }, + [ + new object?[] { "Merge pull request #1234 from feature/one from feature/two to dev", "feature/two", "dev", null, 1234 }, new object?[] { "Merge pull request #1234 in feature/one from feature/two to dev", "feature/two", "dev", null, 1234 }, - new object?[] { "Merge pull request #1234 in v4.0.0 from v4.1.0 to dev", "v4.1.0", "dev", new SemanticVersion(4,1), 1234 }, - new object?[] { "Merge pull request #1234 from origin/feature/one from origin/feature/4.2/two to dev", "origin/feature/4.2/two", "dev", new SemanticVersion(4,2), 1234 }, - new object?[] { "Merge pull request #1234 in feature/4.1/one from feature/4.2/two to dev", "feature/4.2/two", "dev", new SemanticVersion(4,2), 1234 }, - new object?[] { $"Merge pull request #1234 from feature/one from feature/two to {MainBranch}" , "feature/two", MainBranch, null, 1234 }, + new object?[] { "Merge pull request #1234 in v4.0.0 from v4.1.0 to dev", "v4.1.0", "dev", new SemanticVersion(4, 1), 1234 }, + new object?[] { "Merge pull request #1234 from origin/feature/one from origin/feature/4.2.0/two to dev", "origin/feature/4.2.0/two", "dev", new SemanticVersion(4, 2), 1234 }, + new object?[] { "Merge pull request #1234 in feature/4.1.0/one from feature/4.2.0/two to dev", "feature/4.2.0/two", "dev", new SemanticVersion(4, 2), 1234 }, + new object?[] { $"Merge pull request #1234 from feature/one from feature/two to {MainBranch}", "feature/two", MainBranch, null, 1234 }, new object?[] { "Merge pull request #1234 in V4.1.0 from V://10.10.10.10 to dev", "V://10.10.10.10", "dev", null, 1234 }, //TODO: Investigate successful bitbucket merge messages that may be invalid // Regex has double 'from/in from' section. Is that correct? - new object?[] { $"Merge pull request #1234 from feature/one from v4.0.0 to {MainBranch}", "v4.0.0", MainBranch, new SemanticVersion(4), 1234 } - }; + new object?[] { $"Merge pull request #1234 from feature/one from v4.0.0 to {MainBranch}", "v4.0.0", MainBranch, new SemanticVersion(4), 1234 } + ]; [TestCaseSource(nameof(BitBucketPullMergeMessages))] public void ParsesBitBucketPullMergeMessage( @@ -134,25 +132,26 @@ public void ParsesBitBucketPullMergeMessage( int? expectedPullRequestNumber) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("BitBucketPull"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); sut.Version.ShouldBe(expectedVersion); } private static readonly object[] BitBucketPullMergeMessages_v7 = - { - new object[] { $@"Pull request #68: Release/2.2 + [ + new object[] { $@"Pull request #68: Release/2.2.0 -Merge in aaa/777 from release/2.2 to {MainBranch} +Merge in aaa/777 from release/2.2.0 to {MainBranch} -* commit '750aa37753dec1a85b22cc16db851187649d9e97':", "release/2.2", MainBranch, new SemanticVersion(2,2), 68 } - }; +* commit '750aa37753dec1a85b22cc16db851187649d9e97':", "release/2.2.0", MainBranch, new SemanticVersion(2, 2), 68 } + ]; [TestCaseSource(nameof(BitBucketPullMergeMessages_v7))] public void ParsesBitBucketPullMergeMessage_v7( @@ -163,27 +162,58 @@ public void ParsesBitBucketPullMergeMessage_v7( int? expectedPullRequestNumber) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("BitBucketPullv7"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); sut.Version.ShouldBe(expectedVersion); } - private static readonly object?[] SmartGitMergeMessages = + private static readonly object?[] BitBucketCloudPullMergeMessages = + [ + new object?[] { @"Merged in release/2.301.0 (pull request #1789) + +Release/2.301.0 + +Approved-by: John Doe", "release/2.301.0", null, new SemanticVersion(2, 301), 1789 } + ]; + + [TestCaseSource(nameof(BitBucketCloudPullMergeMessages))] + public void ParsesBitBucketCloudPullMergeMessage( + string message, + string expectedMergedBranch, + string expectedTargetBranch, + SemanticVersion expectedVersion, + int? expectedPullRequestNumber) { + // Act + var sut = new MergeMessage(message, this.configurationBuilder.Build()); + + // Assert + sut.FormatName.ShouldBe("BitBucketCloudPull"); + sut.TargetBranch.ShouldBe(expectedTargetBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); + sut.IsMergedPullRequest.ShouldBeTrue(); + sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); + sut.Version.ShouldBe(expectedVersion); + } + + private static readonly object?[] SmartGitMergeMessages = + [ new object?[] { "Finish feature/one", "feature/one", null, null }, new object?[] { "Finish origin/feature/one", "origin/feature/one", null, null }, new object?[] { "Finish v4.0.0", "v4.0.0", null, new SemanticVersion(4) }, - new object?[] { "Finish feature/4.1/one", "feature/4.1/one", null, new SemanticVersion(4, 1) }, - new object?[] { "Finish origin/4.1/feature/one", "origin/4.1/feature/one", null, new SemanticVersion(4, 1) }, + new object?[] { "Finish feature/4.1.0/one", "feature/4.1.0/one", null, new SemanticVersion(4, 1) }, + new object?[] { "Finish origin/4.1.0/feature/one", "origin/4.1.0/feature/one", null, new SemanticVersion(4, 1) }, new object?[] { "Finish V://10.10.10.10", "V://10.10.10.10", null, null }, new object?[] { $"Finish V4.0.0 into {MainBranch}", "V4.0.0", MainBranch, new SemanticVersion(4) } - }; + ]; [TestCaseSource(nameof(SmartGitMergeMessages))] public void ParsesSmartGitMergeMessage( @@ -193,27 +223,28 @@ public void ParsesSmartGitMergeMessage( SemanticVersion expectedVersion) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("SmartGit"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBe(expectedVersion); } private static readonly object?[] RemoteTrackingMergeMessages = - { + [ new object?[] { $"Merge remote-tracking branch 'feature/one' into {MainBranch}", "feature/one", MainBranch, null }, new object?[] { "Merge remote-tracking branch 'origin/feature/one' into dev", "origin/feature/one", "dev", null }, new object?[] { $"Merge remote-tracking branch 'v4.0.0' into {MainBranch}", "v4.0.0", MainBranch, new SemanticVersion(4) }, new object?[] { $"Merge remote-tracking branch 'V4.0.0' into {MainBranch}", "V4.0.0", MainBranch, new SemanticVersion(4) }, - new object?[] { "Merge remote-tracking branch 'feature/4.1/one' into dev", "feature/4.1/one", "dev", new SemanticVersion(4, 1) }, - new object?[] { $"Merge remote-tracking branch 'origin/4.1/feature/one' into {MainBranch}", "origin/4.1/feature/one", MainBranch, new SemanticVersion(4, 1) }, + new object?[] { "Merge remote-tracking branch 'feature/4.1.0/one' into dev", "feature/4.1.0/one", "dev", new SemanticVersion(4, 1) }, + new object?[] { $"Merge remote-tracking branch 'origin/4.1.0/feature/one' into {MainBranch}", "origin/4.1.0/feature/one", MainBranch, new SemanticVersion(4, 1) }, new object?[] { $"Merge remote-tracking branch 'v://10.10.10.10' into {MainBranch}", "v://10.10.10.10", MainBranch, null } - }; + ]; [TestCaseSource(nameof(RemoteTrackingMergeMessages))] public void ParsesRemoteTrackingMergeMessage( @@ -223,42 +254,38 @@ public void ParsesRemoteTrackingMergeMessage( SemanticVersion expectedVersion) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe("RemoteTracking"); sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(expectedMergedBranch); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBe(expectedVersion); } private static readonly object?[] InvalidMergeMessages = - { - new object?[] { "Merge pull request # from feature/one", "", null, null, null }, - new object?[] { $"Merge pull request # in feature/one from feature/two to {MainBranch}" , "", null, null, null }, - new object?[] { $"Zusammengeführter PR : feature/one mit {MainBranch} mergen", "", null, null, null } - }; + [ + new object?[] { "Merge pull request # from feature/one" }, + new object?[] { $"Merge pull request # in feature/one from feature/two to {MainBranch}" }, + new object?[] { $"Zusammengeführter PR : feature/one mit {MainBranch} mergen" } + ]; [TestCaseSource(nameof(InvalidMergeMessages))] - public void ParsesInvalidMergeMessage( - string message, - string expectedMergedBranch, - string expectedTargetBranch, - SemanticVersion expectedVersion, - int? expectedPullRequestNumber) + public void ParsesInvalidMergeMessage(string message) { // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBeNull(); - sut.TargetBranch.ShouldBe(expectedTargetBranch); - sut.MergedBranch.ShouldBe(expectedMergedBranch); + sut.TargetBranch.ShouldBeNull(); + sut.MergedBranch.ShouldBeNull(); sut.IsMergedPullRequest.ShouldBeFalse(); - sut.PullRequestNumber.ShouldBe(expectedPullRequestNumber); - sut.Version.ShouldBe(expectedVersion); + sut.PullRequestNumber.ShouldBeNull(); + sut.Version.ShouldBeNull(); } [Test] @@ -267,18 +294,19 @@ public void MatchesSingleCustomMessage() // Arrange const string message = "My custom message"; const string definition = "MyCustom"; - this.config.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { [definition] = message - }; + }); // Act - var sut = new MergeMessage(message, this.config); + var sut = new MergeMessage(message, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBeEmpty(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -290,20 +318,21 @@ public void MatchesMultipleCustomMessages() // Arrange const string format = "My custom message"; const string definition = "MyCustom"; - this.config.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { ["Default2"] = "some example", ["Default3"] = "another example", [definition] = format - }; + }); // Act - var sut = new MergeMessage(format, this.config); + var sut = new MergeMessage(format, this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBeEmpty(); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBeEmpty(); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); @@ -315,24 +344,25 @@ public void MatchesCaptureGroupsFromCustomMessages() // Arrange const string format = @"^Merged PR #(?\d+) into (?[^\s]*) from (?:(?[^\s]*))"; const string definition = "MyCustom"; - this.config.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { [definition] = format - }; + }); const int pr = 1234; const string target = MainBranch; - const string source = "feature/2.0/example"; + const string source = "feature/2.0.0/example"; // Act - var sut = new MergeMessage($"Merged PR #{pr} into {target} from {source}", this.config); + var sut = new MergeMessage($"Merged PR #{pr} into {target} from {source}", this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBe(target); - sut.MergedBranch.ShouldBe(source); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe(source); sut.IsMergedPullRequest.ShouldBeTrue(); sut.PullRequestNumber.ShouldBe(pr); - sut.Version.ShouldBe(new SemanticVersion(2)); + sut.Version.ShouldBe(new(2)); } [Test] @@ -341,20 +371,21 @@ public void ReturnsAfterFirstMatchingPattern() // Arrange const string format = @"^Merge (branch|tag) '(?[^']*)'(?: into (?[^\s]*))*"; const string definition = "MyCustom"; - this.config.MergeMessageFormats = new Dictionary + this.configurationBuilder.WithMergeMessageFormats(new Dictionary { [definition] = format, ["Default2"] = format, ["Default3"] = format - }; + }); // Act - var sut = new MergeMessage("Merge branch 'this'", this.config); + var sut = new MergeMessage("Merge branch 'this'", this.configurationBuilder.Build()); // Assert sut.FormatName.ShouldBe(definition); sut.TargetBranch.ShouldBeNull(); - sut.MergedBranch.ShouldBe("this"); + sut.MergedBranch.ShouldNotBeNull(); + sut.MergedBranch.Friendly.ShouldBe("this"); sut.IsMergedPullRequest.ShouldBeFalse(); sut.PullRequestNumber.ShouldBe(null); sut.Version.ShouldBeNull(); diff --git a/src/GitVersion.Core.Tests/Model/GitVersionContextTests.cs b/src/GitVersion.Core.Tests/Model/GitVersionContextTests.cs deleted file mode 100644 index e16a66d8ec..0000000000 --- a/src/GitVersion.Core.Tests/Model/GitVersionContextTests.cs +++ /dev/null @@ -1,204 +0,0 @@ -using GitTools.Testing; -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; -using LibGit2Sharp; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using NSubstitute; -using NUnit.Framework; -using Shouldly; - -namespace GitVersion.Core.Tests; - -public class GitVersionContextTests : TestBase -{ - [Test] - [Theory] - public void CanInheritVersioningMode(VersioningMode mode) - { - using var fixture = new EmptyRepositoryFixture(); - - var config = new ConfigurationBuilder() - .Add(new Config { VersioningMode = mode }) - .Build(); - - const string branchName = MainBranch; - - var mockCommit = GitToolsTestingExtensions.CreateMockCommit(); - var mockBranch = GitToolsTestingExtensions.CreateMockBranch(branchName, mockCommit); - - var branches = Substitute.For(); - branches.GetEnumerator().Returns(_ => ((IEnumerable)new[] { mockBranch }).GetEnumerator()); - - var mockRepository = Substitute.For(); - mockRepository.Head.Returns(mockBranch); - mockRepository.Branches.Returns(branches); - mockRepository.Commits.Returns(mockBranch.Commits); - - var effectiveConfiguration = GetEffectiveConfiguration(fixture.RepositoryPath, mockRepository, branchName, config); - - effectiveConfiguration.VersioningMode.ShouldBe(mode); - } - - [TestCase(IncrementStrategy.Inherit, IncrementStrategy.Patch)] // Since it inherits, the increment strategy of main is used => Patch - [TestCase(IncrementStrategy.Patch, null)] - [TestCase(IncrementStrategy.Major, null)] - [TestCase(IncrementStrategy.Minor, null)] - [TestCase(IncrementStrategy.None, null)] - public void CanInheritIncrement(IncrementStrategy increment, IncrementStrategy? alternateExpected) - { - // Dummy branch name to make sure that no default config exists. - const string dummyBranchName = "dummy"; - - var config = new ConfigurationBuilder() - .Add(new Config { Increment = increment }) - .Build(); - - using var fixture = new EmptyRepositoryFixture(); - fixture.MakeACommit(); - fixture.BranchTo(dummyBranchName); - fixture.MakeACommit(); - - var effectiveConfiguration = GetEffectiveConfiguration(fixture.RepositoryPath, fixture.Repository.ToGitRepository(), dummyBranchName, config); - - effectiveConfiguration.Increment.ShouldBe(alternateExpected ?? increment); - } - - [Test] - public void UsesBranchSpecificConfigOverTopLevelDefaults() - { - using var fixture = new EmptyRepositoryFixture(); - - const string branchName = "develop"; - var config = new ConfigurationBuilder() - .Add(new Config - { - VersioningMode = VersioningMode.ContinuousDelivery, - Branches = - { - { - branchName, new BranchConfig - { - VersioningMode = VersioningMode.ContinuousDeployment, - Tag = "alpha" - } - } - } - }) - .Build(); - - var main = GitToolsTestingExtensions.CreateMockBranch(MainBranch, GitToolsTestingExtensions.CreateMockCommit()); - var develop = GitToolsTestingExtensions.CreateMockBranch(branchName, GitToolsTestingExtensions.CreateMockCommit()); - - var branches = Substitute.For(); - branches.GetEnumerator().Returns(_ => ((IEnumerable)new[] { main, develop }).GetEnumerator()); - - var mockRepository = Substitute.For(); - mockRepository.Head.Returns(develop); - mockRepository.Branches.Returns(branches); - mockRepository.Commits.Returns(develop.Commits); - - var effectiveConfiguration = GetEffectiveConfiguration(fixture.RepositoryPath, mockRepository, branchName, config); - - effectiveConfiguration.Tag.ShouldBe("alpha"); - } - - [Test] - public void UsesFirstBranchConfigWhenMultipleMatch() - { - using var fixture = new EmptyRepositoryFixture(); - - var branchConfig = new BranchConfig - { - VersioningMode = VersioningMode.Mainline, - Increment = IncrementStrategy.None, - PreventIncrementOfMergedBranchVersion = false, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsReleaseBranch = false, - SourceBranches = new HashSet() - }; - var config = new ConfigurationBuilder() - .Add(new Config - { - VersioningMode = VersioningMode.ContinuousDelivery, - Branches = - { - { "release/latest", new BranchConfig(branchConfig) { Increment = IncrementStrategy.None, Regex = "release/latest" } }, - { "release", new BranchConfig(branchConfig) { Increment = IncrementStrategy.Patch, Regex = "releases?[/-]" } } - } - }) - .Build(); - - var releaseLatestBranch = GitToolsTestingExtensions.CreateMockBranch("release/latest", GitToolsTestingExtensions.CreateMockCommit()); - var releaseVersionBranch = GitToolsTestingExtensions.CreateMockBranch("release/1.0.0", GitToolsTestingExtensions.CreateMockCommit()); - - var branches = Substitute.For(); - branches.GetEnumerator().Returns(_ => ((IEnumerable)new[] { releaseLatestBranch, releaseVersionBranch }).GetEnumerator()); - - var mockRepository = Substitute.For(); - mockRepository.Branches.Returns(branches); - mockRepository.Head.Returns(releaseLatestBranch); - mockRepository.Commits.Returns(releaseLatestBranch.Commits); - - var latestEffectiveConfiguration = GetEffectiveConfiguration(fixture.RepositoryPath, mockRepository, releaseLatestBranch.Name.Canonical, config); - latestEffectiveConfiguration.Increment.ShouldBe(IncrementStrategy.None); - - mockRepository.Head.Returns(releaseVersionBranch); - var effectiveConfiguration = GetEffectiveConfiguration(fixture.RepositoryPath, mockRepository, releaseVersionBranch.Name.Canonical, config); - effectiveConfiguration.Increment.ShouldBe(IncrementStrategy.Patch); - } - - [Test] - public void CanFindParentBranchForInheritingIncrementStrategy() - { - var config = new ConfigurationBuilder() - .Add(new Config - { - Branches = - { - { "develop", new BranchConfig { Increment = IncrementStrategy.Major } }, - { "feature", new BranchConfig { Increment = IncrementStrategy.Inherit } } - } - }) - .Build(); - - using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - fixture.Repository.MakeACommit(); - var featureBranch = fixture.Repository.CreateBranch("feature/foo"); - Commands.Checkout(fixture.Repository, featureBranch); - fixture.Repository.MakeACommit(); - - var effectiveConfiguration = GetEffectiveConfiguration(fixture.RepositoryPath, fixture.Repository.ToGitRepository(), "develop", config); - - effectiveConfiguration.Increment.ShouldBe(IncrementStrategy.Major); - } - - private static EffectiveConfiguration GetEffectiveConfiguration(string workingDirectory, IGitRepository repository, string branch, Config? config = null) - { - var options = Options.Create(new GitVersionOptions - { - WorkingDirectory = workingDirectory, - RepositoryInfo = { TargetBranch = branch }, - ConfigInfo = { OverrideConfig = config } - }); - - var sp = ConfigureServices(services => - { - services.AddSingleton(options); - services.AddSingleton(repository); - }); - - var context = sp.GetRequiredService>().Value; - var branchConfigurationCalculator = sp.GetRequiredService(); - var configuration = context.FullConfiguration; - var currentBranchConfig = branchConfigurationCalculator.GetBranchConfiguration( - context.CurrentBranch, context.CurrentCommit, configuration - ); - return new(configuration, currentBranchConfig); - } -} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/JsonVersionBuilderTests.Json.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/JsonVersionBuilderTests.Json.approved.txt index 25f1cbdc3a..24061d9bfe 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/JsonVersionBuilderTests.Json.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/JsonVersionBuilderTests.Json.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.0.0", + "AssemblySemVer": "1.2.0.0", + "BranchName": "feature1", + "BuildMetaData": 5, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "feature1", + "FullBuildMetaData": "5.Branch.feature1.Sha.commitSha", + "FullSemVer": "1.2.0-unstable.4+5", + "InformationalVersion": "1.2.0-unstable.4+5.Branch.feature1.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.0", "Minor": 2, "Patch": 0, - "PreReleaseTag": "unstable.4", - "PreReleaseTagWithDash": "-unstable.4", "PreReleaseLabel": "unstable", "PreReleaseLabelWithDash": "-unstable", "PreReleaseNumber": 4, - "WeightedPreReleaseNumber": 4, - "BuildMetaData": 5, - "BuildMetaDataPadded": "0005", - "FullBuildMetaData": "5.Branch.feature1.Sha.commitSha", - "MajorMinorPatch": "1.2.0", + "PreReleaseTag": "unstable.4", + "PreReleaseTagWithDash": "-unstable.4", "SemVer": "1.2.0-unstable.4", - "LegacySemVer": "1.2.0-unstable4", - "LegacySemVerPadded": "1.2.0-unstable0004", - "AssemblySemVer": "1.2.0.0", - "AssemblySemFileVer": "1.2.0.0", - "FullSemVer": "1.2.0-unstable.4+5", - "InformationalVersion": "1.2.0-unstable.4+5.Branch.feature1.Sha.commitSha", - "BranchName": "feature1", - "EscapedBranchName": "feature1", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.0-unstable0004", - "NuGetVersion": "1.2.0-unstable0004", - "NuGetPreReleaseTagV2": "unstable0004", - "NuGetPreReleaseTag": "unstable0004", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 4 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranch.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranch.approved.txt index 0490ce34e1..2656e2afe4 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranch.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranch.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "feature/123", + "BuildMetaData": 5, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "feature-123", + "FullBuildMetaData": "5.Branch.feature-123.Sha.commitSha", + "FullSemVer": "1.2.3+5", + "InformationalVersion": "1.2.3+5.Branch.feature-123.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "", - "PreReleaseTagWithDash": "", "PreReleaseLabel": "", "PreReleaseLabelWithDash": "", "PreReleaseNumber": null, - "WeightedPreReleaseNumber": 0, - "BuildMetaData": 5, - "BuildMetaDataPadded": "0005", - "FullBuildMetaData": "5.Branch.feature-123.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "", + "PreReleaseTagWithDash": "", "SemVer": "1.2.3", - "LegacySemVer": "1.2.3", - "LegacySemVerPadded": "1.2.3", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3+5", - "InformationalVersion": "1.2.3+5.Branch.feature-123.Sha.commitSha", - "BranchName": "feature/123", - "EscapedBranchName": "feature-123", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3", - "NuGetVersion": "1.2.3", - "NuGetPreReleaseTagV2": "", - "NuGetPreReleaseTag": "", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 0 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt index f5f7edf738..55166aebe6 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "feature/123", + "BuildMetaData": 5, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "feature-123", + "FullBuildMetaData": "5.Branch.feature-123.Sha.commitSha", + "FullSemVer": "1.2.3+5", + "InformationalVersion": "1.2.3+5.Branch.feature-123.Sha.commitShortSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "", - "PreReleaseTagWithDash": "", "PreReleaseLabel": "", "PreReleaseLabelWithDash": "", "PreReleaseNumber": null, - "WeightedPreReleaseNumber": 0, - "BuildMetaData": 5, - "BuildMetaDataPadded": "0005", - "FullBuildMetaData": "5.Branch.feature-123.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "", + "PreReleaseTagWithDash": "", "SemVer": "1.2.3", - "LegacySemVer": "1.2.3", - "LegacySemVerPadded": "1.2.3", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3+5", - "InformationalVersion": "1.2.3+5.Branch.feature-123.Sha.commitShortSha", - "BranchName": "feature/123", - "EscapedBranchName": "feature-123", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3", - "NuGetVersion": "1.2.3", - "NuGetPreReleaseTagV2": "", - "NuGetPreReleaseTag": "", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 0 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt index 5ad80cff71..4cc8738920 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreRelease.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "develop", + "BuildMetaData": 5, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "develop", + "FullBuildMetaData": "5.Branch.develop.Sha.commitSha", + "FullSemVer": "1.2.3-unstable.4+5", + "InformationalVersion": "1.2.3-unstable.4+5.Branch.develop.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "unstable.4", - "PreReleaseTagWithDash": "-unstable.4", "PreReleaseLabel": "unstable", "PreReleaseLabelWithDash": "-unstable", "PreReleaseNumber": 4, - "WeightedPreReleaseNumber": 4, - "BuildMetaData": 5, - "BuildMetaDataPadded": "0005", - "FullBuildMetaData": "5.Branch.develop.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "unstable.4", + "PreReleaseTagWithDash": "-unstable.4", "SemVer": "1.2.3-unstable.4", - "LegacySemVer": "1.2.3-unstable4", - "LegacySemVerPadded": "1.2.3-unstable0004", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3-unstable.4+5", - "InformationalVersion": "1.2.3-unstable.4+5.Branch.develop.Sha.commitSha", - "BranchName": "develop", - "EscapedBranchName": "develop", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3-unstable0004", - "NuGetVersion": "1.2.3-unstable0004", - "NuGetPreReleaseTagV2": "unstable0004", - "NuGetPreReleaseTag": "unstable0004", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 4 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt deleted file mode 100644 index 039e780d29..0000000000 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding.approved.txt +++ /dev/null @@ -1,35 +0,0 @@ -{ - "Major": 1, - "Minor": 2, - "Patch": 3, - "PreReleaseTag": "unstable.4", - "PreReleaseTagWithDash": "-unstable.4", - "PreReleaseLabel": "unstable", - "PreReleaseLabelWithDash": "-unstable", - "PreReleaseNumber": 4, - "WeightedPreReleaseNumber": 4, - "BuildMetaData": 5, - "BuildMetaDataPadded": "05", - "FullBuildMetaData": "5.Branch.develop.Sha.commitSha", - "MajorMinorPatch": "1.2.3", - "SemVer": "1.2.3-unstable.4", - "LegacySemVer": "1.2.3-unstable4", - "LegacySemVerPadded": "1.2.3-unstable00004", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3-unstable.4+5", - "InformationalVersion": "1.2.3-unstable.4+5.Branch.develop.Sha.commitSha", - "BranchName": "develop", - "EscapedBranchName": "develop", - "Sha": "commitSha", - "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3-unstable00004", - "NuGetVersion": "1.2.3-unstable00004", - "NuGetPreReleaseTagV2": "unstable0004", - "NuGetPreReleaseTag": "unstable0004", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", - "UncommittedChanges": 0, - "CommitDate": "2014-03-06" -} \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt index 51a0616f66..0b9c98e18a 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeliveryModeForStable.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "develop", + "BuildMetaData": 5, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "develop", + "FullBuildMetaData": "5.Branch.develop.Sha.commitSha", + "FullSemVer": "1.2.3+5", + "InformationalVersion": "1.2.3+5.Branch.develop.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "", - "PreReleaseTagWithDash": "", "PreReleaseLabel": "", "PreReleaseLabelWithDash": "", "PreReleaseNumber": null, - "WeightedPreReleaseNumber": 0, - "BuildMetaData": 5, - "BuildMetaDataPadded": "0005", - "FullBuildMetaData": "5.Branch.develop.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "", + "PreReleaseTagWithDash": "", "SemVer": "1.2.3", - "LegacySemVer": "1.2.3", - "LegacySemVerPadded": "1.2.3", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3+5", - "InformationalVersion": "1.2.3+5.Branch.develop.Sha.commitSha", - "BranchName": "develop", - "EscapedBranchName": "develop", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3", - "NuGetVersion": "1.2.3", - "NuGetPreReleaseTagV2": "", - "NuGetPreReleaseTag": "", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 0 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForMainBranchWithEmptyLabel.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForMainBranchWithEmptyLabel.approved.txt new file mode 100644 index 0000000000..f6bd57ef8f --- /dev/null +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForMainBranchWithEmptyLabel.approved.txt @@ -0,0 +1,27 @@ +{ + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "main", + "BuildMetaData": null, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "main", + "FullBuildMetaData": "Branch.main.Sha.commitSha", + "FullSemVer": "1.2.3-9", + "InformationalVersion": "1.2.3-9+Branch.main.Sha.commitSha", + "Major": 1, + "MajorMinorPatch": "1.2.3", + "Minor": 2, + "Patch": 3, + "PreReleaseLabel": "", + "PreReleaseLabelWithDash": "", + "PreReleaseNumber": 9, + "PreReleaseTag": "9", + "PreReleaseTagWithDash": "-9", + "SemVer": "1.2.3-9", + "Sha": "commitSha", + "ShortSha": "commitShortSha", + "UncommittedChanges": 0, + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 55009 +} \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt index 831febba8e..34ec2c613b 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForPreRelease.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "develop", + "BuildMetaData": null, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "develop", + "FullBuildMetaData": "Branch.develop.Sha.commitSha", + "FullSemVer": "1.2.3-unstable.8", + "InformationalVersion": "1.2.3-unstable.8+Branch.develop.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "unstable.8", - "PreReleaseTagWithDash": "-unstable.8", "PreReleaseLabel": "unstable", "PreReleaseLabelWithDash": "-unstable", "PreReleaseNumber": 8, - "WeightedPreReleaseNumber": 8, - "BuildMetaData": null, - "BuildMetaDataPadded": "", - "FullBuildMetaData": "Branch.develop.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "unstable.8", + "PreReleaseTagWithDash": "-unstable.8", "SemVer": "1.2.3-unstable.8", - "LegacySemVer": "1.2.3-unstable8", - "LegacySemVerPadded": "1.2.3-unstable0008", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3-unstable.8", - "InformationalVersion": "1.2.3-unstable.8+Branch.develop.Sha.commitSha", - "BranchName": "develop", - "EscapedBranchName": "develop", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3-unstable0008", - "NuGetVersion": "1.2.3-unstable0008", - "NuGetPreReleaseTagV2": "unstable0008", - "NuGetPreReleaseTag": "unstable0008", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 8 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt index 7cc02e1bf3..de207b299c 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStable.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "develop", + "BuildMetaData": null, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "develop", + "FullBuildMetaData": "Branch.develop.Sha.commitSha", + "FullSemVer": "1.2.3-ci.5", + "InformationalVersion": "1.2.3-ci.5+Branch.develop.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "ci.5", - "PreReleaseTagWithDash": "-ci.5", "PreReleaseLabel": "ci", "PreReleaseLabelWithDash": "-ci", "PreReleaseNumber": 5, - "WeightedPreReleaseNumber": 5, - "BuildMetaData": null, - "BuildMetaDataPadded": "", - "FullBuildMetaData": "Branch.develop.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "ci.5", + "PreReleaseTagWithDash": "-ci.5", "SemVer": "1.2.3-ci.5", - "LegacySemVer": "1.2.3-ci5", - "LegacySemVerPadded": "1.2.3-ci0005", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3-ci.5", - "InformationalVersion": "1.2.3-ci.5+Branch.develop.Sha.commitSha", - "BranchName": "develop", - "EscapedBranchName": "develop", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3-ci0005", - "NuGetVersion": "1.2.3-ci0005", - "NuGetPreReleaseTagV2": "ci0005", - "NuGetPreReleaseTag": "ci0005", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 5 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt index 11b2530fef..330accf021 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt +++ b/src/GitVersion.Core.Tests/VersionCalculation/Approved/VariableProviderTests.ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged.approved.txt @@ -1,35 +1,27 @@ { + "AssemblySemFileVer": "1.2.3.0", + "AssemblySemVer": "1.2.3.0", + "BranchName": "", + "BuildMetaData": 5, + "CommitDate": "2014-03-06", + "CommitsSinceVersionSource": 5, + "EscapedBranchName": "", + "FullBuildMetaData": "5.Sha.commitSha", + "FullSemVer": "1.2.3+5", + "InformationalVersion": "1.2.3+5.Sha.commitSha", "Major": 1, + "MajorMinorPatch": "1.2.3", "Minor": 2, "Patch": 3, - "PreReleaseTag": "", - "PreReleaseTagWithDash": "", "PreReleaseLabel": "", "PreReleaseLabelWithDash": "", "PreReleaseNumber": null, - "WeightedPreReleaseNumber": 0, - "BuildMetaData": 5, - "BuildMetaDataPadded": "0005", - "FullBuildMetaData": "5.Sha.commitSha", - "MajorMinorPatch": "1.2.3", + "PreReleaseTag": "", + "PreReleaseTagWithDash": "", "SemVer": "1.2.3", - "LegacySemVer": "1.2.3", - "LegacySemVerPadded": "1.2.3", - "AssemblySemVer": "1.2.3.0", - "AssemblySemFileVer": "1.2.3.0", - "FullSemVer": "1.2.3+5", - "InformationalVersion": "1.2.3+5.Sha.commitSha", - "BranchName": "", - "EscapedBranchName": "", "Sha": "commitSha", "ShortSha": "commitShortSha", - "NuGetVersionV2": "1.2.3", - "NuGetVersion": "1.2.3", - "NuGetPreReleaseTagV2": "", - "NuGetPreReleaseTag": "", - "VersionSourceSha": "versionSourceSha", - "CommitsSinceVersionSource": 5, - "CommitsSinceVersionSourcePadded": "0005", "UncommittedChanges": 0, - "CommitDate": "2014-03-06" + "VersionSourceSha": "versionSourceSha", + "WeightedPreReleaseNumber": 0 } \ No newline at end of file diff --git a/src/GitVersion.Core.Tests/VersionCalculation/BaseVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/BaseVersionCalculatorTests.cs deleted file mode 100644 index ec2229e460..0000000000 --- a/src/GitVersion.Core.Tests/VersionCalculation/BaseVersionCalculatorTests.cs +++ /dev/null @@ -1,249 +0,0 @@ -using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; -using NSubstitute; -using NUnit.Framework; -using Shouldly; - -namespace GitVersion.Core.Tests.VersionCalculation; - -[TestFixture] -public class BaseVersionCalculatorTests : TestBase -{ - [Test] - public void ChoosesHighestVersionReturnedFromStrategies() - { - var dateTimeOffset = DateTimeOffset.Now; - var versionCalculator = GetBaseVersionCalculator(contextBuilder => - contextBuilder.OverrideServices(services => - { - services.RemoveAll(); - services.AddSingleton(new V1Strategy(DateTimeOffset.Now)); - services.AddSingleton(new V2Strategy(dateTimeOffset)); - })); - - var (baseVersion, _) = versionCalculator.GetBaseVersion(); - - baseVersion.SemanticVersion.ToString().ShouldBe("2.0.0"); - baseVersion.ShouldIncrement.ShouldBe(true); - baseVersion.BaseVersionSource.ShouldNotBeNull(); - baseVersion.BaseVersionSource.When.ShouldBe(dateTimeOffset); - } - - [Test] - public void UsesWhenFromNextBestMatchIfHighestDoesntHaveWhen() - { - var when = DateTimeOffset.Now; - - var versionCalculator = GetBaseVersionCalculator(contextBuilder => - contextBuilder.OverrideServices(services => - { - services.RemoveAll(); - services.AddSingleton(new V1Strategy(when)); - services.AddSingleton(new V2Strategy(null)); - })); - - var (baseVersion, _) = versionCalculator.GetBaseVersion(); - - baseVersion.SemanticVersion.ToString().ShouldBe("2.0.0"); - baseVersion.ShouldIncrement.ShouldBe(true); - baseVersion.BaseVersionSource.ShouldNotBeNull(); - baseVersion.BaseVersionSource.When.ShouldBe(when); - } - - [Test] - public void UsesWhenFromNextBestMatchIfHighestDoesntHaveWhenReversedOrder() - { - var when = DateTimeOffset.Now; - - var versionCalculator = GetBaseVersionCalculator(contextBuilder => - contextBuilder.OverrideServices(services => - { - services.RemoveAll(); - services.AddSingleton(new V1Strategy(null)); - services.AddSingleton(new V2Strategy(when)); - })); - - var (baseVersion, _) = versionCalculator.GetBaseVersion(); - - baseVersion.SemanticVersion.ToString().ShouldBe("2.0.0"); - baseVersion.ShouldIncrement.ShouldBe(true); - baseVersion.BaseVersionSource.ShouldNotBeNull(); - baseVersion.BaseVersionSource.When.ShouldBe(when); - } - - [Test] - public void ShouldNotFilterVersion() - { - var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude()); - var version = new BaseVersion("dummy", false, new SemanticVersion(2), GitToolsTestingExtensions.CreateMockCommit(), null); - - var versionCalculator = GetBaseVersionCalculator(contextBuilder => contextBuilder - .WithConfig(new Config { Ignore = fakeIgnoreConfig }) - .OverrideServices(services => - { - services.RemoveAll(); - services.AddSingleton(new TestVersionStrategy(version)); - })); - - var (baseVersion, _) = versionCalculator.GetBaseVersion(); - - baseVersion.Source.ShouldBe(version.Source); - baseVersion.ShouldIncrement.ShouldBe(version.ShouldIncrement); - baseVersion.SemanticVersion.ShouldBe(version.SemanticVersion); - } - - [Test] - public void ShouldFilterVersion() - { - var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude()); - - var higherVersion = new BaseVersion("exclude", false, new SemanticVersion(2), GitToolsTestingExtensions.CreateMockCommit(), null); - var lowerVersion = new BaseVersion("dummy", false, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), null); - - var versionCalculator = GetBaseVersionCalculator(contextBuilder => contextBuilder - .WithConfig(new Config { Ignore = fakeIgnoreConfig }) - .OverrideServices(services => - { - services.RemoveAll(); - services.AddSingleton(new TestVersionStrategy(higherVersion, lowerVersion)); - })); - var (baseVersion, _) = versionCalculator.GetBaseVersion(); - - baseVersion.Source.ShouldNotBe(higherVersion.Source); - baseVersion.SemanticVersion.ShouldNotBe(higherVersion.SemanticVersion); - baseVersion.Source.ShouldBe(lowerVersion.Source); - baseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion); - } - - [Test] - public void ShouldIgnorePreReleaseVersionInMainlineMode() - { - var fakeIgnoreConfig = new TestIgnoreConfig(new ExcludeSourcesContainingExclude()); - - var lowerVersion = new BaseVersion("dummy", false, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), null); - var preReleaseVersion = new BaseVersion( - "prerelease", - false, - new SemanticVersion(1, 0, 1) - { - PreReleaseTag = new SemanticVersionPreReleaseTag - { - Name = "alpha", - Number = 1 - } - }, - GitToolsTestingExtensions.CreateMockCommit(), - null - ); - - var versionCalculator = GetBaseVersionCalculator(contextBuilder => contextBuilder - .WithConfig(new Config { VersioningMode = VersioningMode.Mainline, Ignore = fakeIgnoreConfig }) - .OverrideServices(services => - { - services.RemoveAll(); - services.AddSingleton(new TestVersionStrategy(preReleaseVersion, lowerVersion)); - })); - var (baseVersion, _) = versionCalculator.GetBaseVersion(); - - baseVersion.Source.ShouldNotBe(preReleaseVersion.Source); - baseVersion.SemanticVersion.ShouldNotBe(preReleaseVersion.SemanticVersion); - baseVersion.Source.ShouldBe(lowerVersion.Source); - baseVersion.SemanticVersion.ShouldBe(lowerVersion.SemanticVersion); - } - - private static IBaseVersionCalculator GetBaseVersionCalculator(Action contextBuilderAction) - { - var contextBuilder = new GitVersionContextBuilder(); - contextBuilderAction.Invoke(contextBuilder); - - contextBuilder.Build(); - contextBuilder.ServicesProvider.ShouldNotBeNull(); - return contextBuilder.ServicesProvider.GetRequiredService(); - } - - private class TestIgnoreConfig : IgnoreConfig - { - private readonly IVersionFilter filter; - - public override bool IsEmpty => false; - - public TestIgnoreConfig(IVersionFilter filter) => this.filter = filter; - - public override IEnumerable ToFilters() - { - yield return this.filter; - } - } - - private class ExcludeSourcesContainingExclude : IVersionFilter - { - public bool Exclude(BaseVersion version, out string? reason) - { - reason = null; - - if (!version.Source.Contains("exclude")) - return false; - - reason = "was excluded"; - return true; - } - } - - private sealed class V1Strategy : IVersionStrategy - { - private readonly ICommit? when; - - public V1Strategy(DateTimeOffset? when) - { - if (when != null) - { - this.when = GitToolsTestingExtensions.CreateMockCommit(); - this.when.When.Returns(when.Value); - } - else - { - this.when = null; - } - } - - public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) - { - yield return new BaseVersion("Source 1", false, new SemanticVersion(1), this.when, null); - } - } - - private sealed class V2Strategy : IVersionStrategy - { - private readonly ICommit? when; - - public V2Strategy(DateTimeOffset? when) - { - if (when != null) - { - this.when = GitToolsTestingExtensions.CreateMockCommit(); - this.when.When.Returns(when.Value); - } - else - { - this.when = null; - } - } - - public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) - { - yield return new BaseVersion("Source 2", true, new SemanticVersion(2), this.when, null); - } - } - - private sealed class TestVersionStrategy : IVersionStrategy - { - private readonly IEnumerable baseVersions; - - public TestVersionStrategy(params BaseVersion[] baseVersions) => this.baseVersions = baseVersions; - - public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) => this.baseVersions; - } -} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs new file mode 100644 index 0000000000..0b90e579f5 --- /dev/null +++ b/src/GitVersion.Core.Tests/VersionCalculation/EffectiveBranchConfigurationFinderTests.cs @@ -0,0 +1,375 @@ +using GitVersion.Common; +using GitVersion.Configuration; +using GitVersion.Git; +using GitVersion.Logging; +using GitVersion.VersionCalculation; + +namespace GitVersion.Core.Tests.VersionCalculation; + +[TestFixture] +public class EffectiveBranchConfigurationFinderTests +{ + [Theory] + public void When_getting_configurations_of_a_branch_without_versioning_mode_Given_fallback_configuration_with_versioning_mode_Then_result_should_have_versioning_mode( + DeploymentMode versioningMode) + { + // Arrange + var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(versioningMode) + .WithBranch("main", builder => builder.WithDeploymentMode(null)) + .Build(); + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any>()).Returns([]); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(branchMock); + actual[0].Value.DeploymentMode.ShouldBe(versioningMode); + } + + [Theory] + public void When_getting_configurations_of_a_branch_with_versioning_mode_Given_fallback_configuration_without_versioning_mode_Then_result_should_have_versioning_mode( + DeploymentMode versioningMode) + { + // Arrange + var mainBranchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(null) + .WithBranch("main", builder => builder.WithDeploymentMode(versioningMode)) + .WithBranch("develop", builder => builder.WithDeploymentMode(null).WithIncrement(IncrementStrategy.Inherit)) + .Build(); + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(developBranchMock, configuration, Arg.Any>()).Returns(new[] { mainBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(developBranchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(mainBranchMock); + actual[0].Value.DeploymentMode.ShouldBe(versioningMode); + } + + [Theory] + public void When_getting_configurations_of_a_branch_with_versioning_mode_Given_parent_configuration_with_versioning_mode_Then_result_should_not_have_versioning_mode_of_parent( + DeploymentMode versioningMode) + { + // Arrange + var mainBranchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithDeploymentMode(null) + .WithBranch("main", builder => builder.WithDeploymentMode(versioningMode)) + .WithBranch("develop", builder => builder + .WithDeploymentMode(DeploymentMode.ContinuousDelivery).WithIncrement(IncrementStrategy.Inherit) + ) + .Build(); + + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(developBranchMock, configuration, Arg.Any>()).Returns(new[] { mainBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(developBranchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(mainBranchMock); + if (versioningMode == DeploymentMode.ContinuousDelivery) + { + actual[0].Value.DeploymentMode.ShouldBe(versioningMode); + } + else + { + actual[0].Value.DeploymentMode.ShouldNotBe(versioningMode); + } + } + + [Test] + public void When_getting_configurations_of_a_branch_with_tag_alpha_Given_branch_which_inherits_from_parent_branch_Then_result_should_have_tag_alpha() + { + // Arrange + var mainBranchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder.WithLabel(string.Empty)) + .WithBranch("develop", builder => builder + .WithIncrement(IncrementStrategy.Inherit).WithLabel("alpha") + ) + .Build(); + + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(developBranchMock, configuration, Arg.Any>()).Returns(new[] { mainBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(developBranchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(mainBranchMock); + actual[0].Value.Label.ShouldBe("alpha"); + } + + [Test] + public void When_getting_configurations_of_a_branch_without_tag_Given_branch_which_inherits_from_parent_branch_Then_result_should_have_tag_from_parent() + { + // Arrange + var mainBranchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder.WithLabel(string.Empty)) + .WithBranch("develop", builder => builder + .WithIncrement(IncrementStrategy.Inherit).WithLabel(null) + ) + .Build(); + + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(developBranchMock, configuration, Arg.Any>()).Returns(new[] { mainBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(developBranchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(mainBranchMock); + actual[0].Value.Label.ShouldBe(string.Empty); + } + + [TestCase("release/latest", IncrementStrategy.None, "latest")] + [TestCase("release/1.0.0", IncrementStrategy.Patch, "not-latest")] + public void UsesFirstBranchConfigWhenMultipleMatch(string branchName, IncrementStrategy incrementStrategy, string label) + { + // Arrange + var releaseBranchMock = GitToolsTestingExtensions.CreateMockBranch(branchName, GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithoutBranches() + .WithBranch("release/latest", builder => builder + .WithIncrement(IncrementStrategy.None) + .WithLabel("latest") + .WithRegularExpression("release/latest") + ) + .WithBranch("release", builder => builder + .WithIncrement(IncrementStrategy.Patch) + .WithLabel("not-latest") + .WithRegularExpression("releases?[/-]") + ) + .Build(); + + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(releaseBranchMock, configuration, Arg.Any>()).Returns([]); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(releaseBranchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(releaseBranchMock); + actual[0].Value.Increment.ShouldBe(incrementStrategy); + actual[0].Value.Label.ShouldBe(label); + } + + [Test] + public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_configuration_with_increment_inherit_Then_result_should_be_empty() + { + // Arrange + var branchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(IncrementStrategy.Inherit) + .WithBranch("develop", builder => builder.WithIncrement(IncrementStrategy.Inherit)) + .Build(); + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any>()).Returns([]); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray(); + + // Assert + actual.ShouldBeEmpty(); + } + + [TestCase(IncrementStrategy.None)] + [TestCase(IncrementStrategy.Patch)] + [TestCase(IncrementStrategy.Minor)] + [TestCase(IncrementStrategy.Major)] + public void When_getting_configurations_of_an_orphaned_branch_Given_fallback_configuration_with_increment_Then_result_should_have_fallback_increment( + IncrementStrategy fallbackIncrement) + { + // Arrange + var branchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(fallbackIncrement) + .WithBranch("develop", builder => builder.WithIncrement(IncrementStrategy.Inherit)) + .Build(); + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any>()).Returns([]); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(branchMock); + actual[0].Value.Increment.ShouldBe(fallbackIncrement); + } + + [Test] + public void When_getting_configurations_of_an_unknown_branch_Given_fallback_and_unknown_configuration_with_increment_inherit_Then_result_should_be_empty() + { + // Arrange + var branchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(IncrementStrategy.Inherit) + .WithBranch("unknown", builder => builder.WithIncrement(IncrementStrategy.Inherit)) + .Build(); + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any>()).Returns([]); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray(); + + // Assert + actual.ShouldBeEmpty(); + } + + [TestCase(IncrementStrategy.None)] + [TestCase(IncrementStrategy.Patch)] + [TestCase(IncrementStrategy.Minor)] + [TestCase(IncrementStrategy.Major)] + public void When_getting_configurations_of_an_unknown_branch_Given_fallback_configuration_with_increment_and_unknown_configuration_with_increment_inherit_Then_result_should_have_fallback_increment( + IncrementStrategy fallbackIncrement) + { + // Arrange + var branchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(fallbackIncrement) + .WithBranch("unknown", builder => builder.WithIncrement(IncrementStrategy.Inherit)) + .Build(); + var repositoryStoreMock = Substitute.For(); + repositoryStoreMock.GetSourceBranches(branchMock, configuration, Arg.Any>()).Returns([]); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(branchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(branchMock); + actual[0].Value.Increment.ShouldBe(fallbackIncrement); + } + + [Theory] + public void When_getting_configurations_of_an_unknown_branch_Given_fallback_configuration_with_increment_and_develop_branch_with_increment_Then_result_should_have_develop_increment( + IncrementStrategy fallbackIncrement, IncrementStrategy developIncrement) + { + // Arrange + var unknownBranchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(fallbackIncrement) + .WithBranch("develop", builder => builder.WithIncrement(developIncrement)) + .Build(); + var repositoryStoreMock = Substitute.For(); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + repositoryStoreMock.GetSourceBranches(unknownBranchMock, configuration, Arg.Any>()).Returns(new[] { developBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(unknownBranchMock, configuration).ToArray(); + + // Assert + if (fallbackIncrement == IncrementStrategy.Inherit && developIncrement == IncrementStrategy.Inherit) + { + actual.ShouldBeEmpty(); + } + else + { + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(developBranchMock); + + actual[0].Value.Increment.ShouldBe(developIncrement == IncrementStrategy.Inherit ? fallbackIncrement : developIncrement); + } + } + + [Theory] + public void When_getting_configurations_of_an_unknown_branch_Given_fallback_configuration_with_increment_and_develop_branch_with_increment_inherit_Then_result_should_have_fallback_increment( + IncrementStrategy fallbackIncrement) + { + // Arrange + var unknownBranchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(fallbackIncrement) + .WithBranch("develop", builder => builder.WithIncrement(IncrementStrategy.Inherit)) + .Build(); + var repositoryStoreMock = Substitute.For(); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + repositoryStoreMock.GetSourceBranches(unknownBranchMock, configuration, Arg.Any>()).Returns(new[] { developBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(unknownBranchMock, configuration).ToArray(); + + // Assert + if (fallbackIncrement == IncrementStrategy.Inherit) + { + actual.ShouldBeEmpty(); + } + else + { + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(developBranchMock); + actual[0].Value.Increment.ShouldBe(fallbackIncrement); + } + } + + [TestCase(IncrementStrategy.None)] + [TestCase(IncrementStrategy.Patch)] + [TestCase(IncrementStrategy.Minor)] + [TestCase(IncrementStrategy.Major)] + public void When_getting_configurations_of_an_unknown_branch_Given_fallback_and_unknown_configuration_with_increment_inherit_and_develop_branch_with_increment_Then_result_should_have_develop_branch_increment( + IncrementStrategy developBranchIncrement) + { + // Arrange + var unknownBranchMock = GitToolsTestingExtensions.CreateMockBranch("unknown", GitToolsTestingExtensions.CreateMockCommit()); + var configuration = GitFlowConfigurationBuilder.New + .WithIncrement(IncrementStrategy.Inherit) + .WithBranch("develop", builder => builder.WithIncrement(developBranchIncrement)) + .Build(); + var repositoryStoreMock = Substitute.For(); + var developBranchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); + repositoryStoreMock.GetSourceBranches(Arg.Any(), Arg.Any(), Arg.Any>()).Returns(new[] { developBranchMock }); + + var unitUnderTest = new EffectiveBranchConfigurationFinder(Substitute.For(), repositoryStoreMock); + + // Act + var actual = unitUnderTest.GetConfigurations(unknownBranchMock, configuration).ToArray(); + + // Assert + actual.ShouldHaveSingleItem(); + actual[0].Branch.ShouldBe(developBranchMock); + actual[0].Value.Increment.ShouldBe(developBranchIncrement); + } +} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/JsonVersionBuilderTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/JsonVersionBuilderTests.cs index 9ffaa56d5e..3db950eb62 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/JsonVersionBuilderTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/JsonVersionBuilderTests.cs @@ -1,8 +1,7 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -13,8 +12,6 @@ public class JsonVersionBuilderTests : TestBase public void Setup() => ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void Json() { var semanticVersion = new SemanticVersion @@ -23,16 +20,13 @@ public void Json() Minor = 2, Patch = 0, PreReleaseTag = "unstable4", - BuildMetaData = new SemanticVersionBuildMetaData("versionSourceSha", 5, "feature1", "commitSha", "commitShortSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z"), 0) + BuildMetaData = new("versionSourceSha", 5, "feature1", "commitSha", "commitShortSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z"), 0) }; - var config = new TestEffectiveConfiguration(); + var serviceProvider = ConfigureServices(); - var sp = ConfigureServices(); - - var variableProvider = sp.GetRequiredService(); - var variables = variableProvider.GetVariablesFor(semanticVersion, config, false); - var json = variables.ToString(); - json.ShouldMatchApproved(c => c.SubFolder("Approved")); + var variableProvider = serviceProvider.GetRequiredService(); + var variables = variableProvider.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } } diff --git a/src/GitVersion.Core.Tests/VersionCalculation/MinDateVersionFilterTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/MinDateVersionFilterTests.cs index dcc568f49b..bd5438ecc7 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/MinDateVersionFilterTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/MinDateVersionFilterTests.cs @@ -1,7 +1,5 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.VersionCalculation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -21,7 +19,7 @@ public void VerifyNullGuard() public void WhenCommitShouldExcludeWithReason() { var commit = GitToolsTestingExtensions.CreateMockCommit(); - var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); + BaseVersion version = new("dummy", new SemanticVersion(1), commit); var futureDate = DateTimeOffset.UtcNow.AddYears(1); var sut = new MinDateVersionFilter(futureDate); @@ -33,7 +31,7 @@ public void WhenCommitShouldExcludeWithReason() public void WhenShaMismatchShouldNotExclude() { var commit = GitToolsTestingExtensions.CreateMockCommit(); - var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); + BaseVersion version = new("dummy", new SemanticVersion(1), commit); var pastDate = DateTimeOffset.UtcNow.AddYears(-1); var sut = new MinDateVersionFilter(pastDate); @@ -44,7 +42,7 @@ public void WhenShaMismatchShouldNotExclude() [Test] public void ExcludeShouldAcceptVersionWithNullCommit() { - var version = new BaseVersion("dummy", false, new SemanticVersion(1), null, string.Empty); + BaseVersion version = new("dummy", new SemanticVersion(1)); var futureDate = DateTimeOffset.UtcNow.AddYears(1); var sut = new MinDateVersionFilter(futureDate); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs index 0f6117dfbb..369ad1ade6 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/NextVersionCalculatorTests.cs @@ -1,13 +1,9 @@ -using GitTools.Testing; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Core.Tests.IntegrationTests; -using GitVersion.Model.Configuration; using GitVersion.VersionCalculation; using LibGit2Sharp; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.VersionCalculation; @@ -16,24 +12,9 @@ public class NextVersionCalculatorTests : TestBase [Test] public void ShouldIncrementVersionBasedOnConfig() { - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData("ef7d0d7e1e700f1c7c9fa01ea6791bb778a5c37c", 1, MainBranch, "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now, 0); - - var contextBuilder = new GitVersionContextBuilder(); - contextBuilder - .OverrideServices(services => - { - var configuration = TestConfigurationBuilder.New.Build(); - var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); - var effectiveConfiguration = new EffectiveConfiguration(configuration, configuration.GetBranchConfiguration("main")); - var effectiveBranchConfiguration = new EffectiveBranchConfiguration(branchMock, effectiveConfiguration); - var testBaseVersionCalculator = new TestBaseVersionCalculator( - true, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), effectiveBranchConfiguration - ); - services.AddSingleton(testBaseVersionCalculator); - services.AddSingleton(new TestMainlineVersionCalculator(semanticVersionBuildMetaData)); - }) - .WithConfig(new Config()) - .Build(); + using var contextBuilder = new GitVersionContextBuilder(); + + contextBuilder.Build(); contextBuilder.ServicesProvider.ShouldNotBeNull(); var nextVersionCalculator = contextBuilder.ServicesProvider.GetRequiredService(); @@ -41,31 +22,19 @@ public void ShouldIncrementVersionBasedOnConfig() var nextVersion = nextVersionCalculator.FindVersion(); - nextVersion.IncrementedVersion.ToString().ShouldBe("1.0.1"); + nextVersion.ToString().ShouldBe("0.0.1-0"); } [Test] public void DoesNotIncrementWhenBaseVersionSaysNotTo() { - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData("ef7d0d7e1e700f1c7c9fa01ea6791bb778a5c37c", 1, MainBranch, "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now, 0); - - var contextBuilder = new GitVersionContextBuilder(); - - contextBuilder - .OverrideServices(services => - { - var configuration = TestConfigurationBuilder.New.Build(); - var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); - var effectiveConfiguration = new EffectiveConfiguration(configuration, configuration.GetBranchConfiguration("main")); - var effectiveBranchConfiguration = new EffectiveBranchConfiguration(branchMock, effectiveConfiguration); - var testBaseVersionCalculator = new TestBaseVersionCalculator( - false, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), effectiveBranchConfiguration - ); - services.AddSingleton(testBaseVersionCalculator); - services.AddSingleton(new TestMainlineVersionCalculator(semanticVersionBuildMetaData)); - }) - .WithConfig(new Config()) - .Build(); + using var contextBuilder = new GitVersionContextBuilder(); + + var overrideConfiguration = new Dictionary() + { + { "next-version", "1.0.0" } + }; + contextBuilder.WithOverrideConfiguration(overrideConfiguration).Build(); contextBuilder.ServicesProvider.ShouldNotBeNull(); var nextVersionCalculator = contextBuilder.ServicesProvider.GetRequiredService(); @@ -74,30 +43,15 @@ public void DoesNotIncrementWhenBaseVersionSaysNotTo() var nextVersion = nextVersionCalculator.FindVersion(); - nextVersion.IncrementedVersion.ToString().ShouldBe("1.0.0"); + nextVersion.ToString().ShouldBe("1.0.0-0"); } [Test] public void AppliesBranchPreReleaseTag() { - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData("ef7d0d7e1e700f1c7c9fa01ea6791bb778a5c37c", 2, "develop", "b1a34edbd80e141f7cc046c074f109be7d022074", "b1a34e", DateTimeOffset.Now, 0); - var contextBuilder = new GitVersionContextBuilder(); - - contextBuilder - .OverrideServices(services => - { - var configuration = TestConfigurationBuilder.New.Build(); - var branchMock = GitToolsTestingExtensions.CreateMockBranch("develop", GitToolsTestingExtensions.CreateMockCommit()); - var effectiveConfiguration = new EffectiveConfiguration(configuration, configuration.GetBranchConfiguration("develop")); - var effectiveBranchConfiguration = new EffectiveBranchConfiguration(branchMock, effectiveConfiguration); - var testBaseVersionCalculator = new TestBaseVersionCalculator( - false, new SemanticVersion(1), GitToolsTestingExtensions.CreateMockCommit(), effectiveBranchConfiguration - ); - services.AddSingleton(testBaseVersionCalculator); - services.AddSingleton(new TestMainlineVersionCalculator(semanticVersionBuildMetaData)); - }) - .WithDevelopBranch() - .Build(); + using var contextBuilder = new GitVersionContextBuilder(); + + contextBuilder.WithDevelopBranch().Build(); contextBuilder.ServicesProvider.ShouldNotBeNull(); var nextVersionCalculator = contextBuilder.ServicesProvider.GetRequiredService(); @@ -105,27 +59,20 @@ public void AppliesBranchPreReleaseTag() var nextVersion = nextVersionCalculator.FindVersion(); - nextVersion.IncrementedVersion.ToString("f").ShouldBe("1.0.0-alpha.1+2"); + nextVersion.ToString("f").ShouldBe("0.1.0-alpha.0"); } [Test] - public void PreReleaseTagCanUseBranchName() + public void PreReleaseLabelCanUseBranchName() { - var config = new Config - { - NextVersion = "1.0.0", - Branches = new Dictionary - { - { - "custom", new BranchConfig - { - Regex = "custom/", - Tag = "useBranchName", - SourceBranches = new HashSet() - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.0.0") + .WithBranch("custom", builder => builder + .WithRegularExpression("^custom?[/-](?.+)") + .WithLabel(ConfigurationConstants.BranchNamePlaceholder) + .WithSourceBranches() + ) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -134,34 +81,34 @@ public void PreReleaseTagCanUseBranchName() fixture.BranchTo("custom/foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.0-foo.1+2", config); + fixture.AssertFullSemver("1.0.0-foo.3", configuration); } [Test] public void PreReleaseVersionMainline() { - var config = new Config - { - VersioningMode = VersioningMode.Mainline, - NextVersion = "1.0.0" - }; + var configuration = TrunkBasedConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); - fixture.BranchTo("foo"); + fixture.MakeACommit(); + fixture.BranchTo("feature/foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.0-foo.1", config); + fixture.AssertFullSemver("0.1.0-foo.1", configuration); + + fixture.BranchTo("bar"); + fixture.MakeACommit(); + + fixture.AssertFullSemver("0.0.3-bar.2", configuration); } [Test] public void MergeIntoMainline() { - var config = new Config - { - VersioningMode = VersioningMode.Mainline, - NextVersion = "1.0.0" - }; + var configuration = TrunkBasedConfigurationBuilder.New + .WithNextVersion("1.0.0") + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -170,118 +117,111 @@ public void MergeIntoMainline() fixture.Checkout(MainBranch); fixture.MergeNoFF("foo"); - fixture.AssertFullSemver("1.0.0", config); + fixture.AssertFullSemver("1.0.0", configuration); } [Test] public void MergeFeatureIntoMainline() { - var config = new Config - { - VersioningMode = VersioningMode.Mainline - }; + var configuration = TrunkBasedConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); fixture.ApplyTag("1.0.0"); - fixture.AssertFullSemver("1.0.0", config); + fixture.AssertFullSemver("1.0.0", configuration); fixture.BranchTo("feature/foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.1-foo.1", config); - fixture.ApplyTag("1.0.1-foo.1"); + fixture.AssertFullSemver("1.1.0-foo.1", configuration); + fixture.ApplyTag("1.1.0-foo.1"); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.0.1", config); + fixture.AssertFullSemver("1.1.0", configuration); + } + + [Test] + public void MergeHotfixIntoMainline() + { + var configuration = TrunkBasedConfigurationBuilder.New.Build(); + + using var fixture = new EmptyRepositoryFixture(); + fixture.MakeACommit(); + fixture.ApplyTag("1.0.0"); + fixture.AssertFullSemver("1.0.0", configuration); + + fixture.BranchTo("hotfix/foo"); + fixture.MakeACommit(); + fixture.AssertFullSemver("1.0.1-foo.1", configuration); + fixture.ApplyTag("1.0.1-foo.1"); + + fixture.Checkout(MainBranch); + fixture.MergeNoFF("hotfix/foo"); + fixture.AssertFullSemver("1.0.1", configuration); } [Test] public void MergeFeatureIntoMainlineWithMinorIncrement() { - var config = new Config - { - VersioningMode = VersioningMode.Mainline, - Branches = new Dictionary - { - { "feature", new BranchConfig { Increment = IncrementStrategy.Minor } } - }, - Ignore = new IgnoreConfig { ShAs = new List() }, - MergeMessageFormats = new Dictionary() - }; + var configuration = TrunkBasedConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); fixture.ApplyTag("1.0.0"); - fixture.AssertFullSemver("1.0.0", config); + fixture.AssertFullSemver("1.0.0", configuration); fixture.BranchTo("feature/foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.0-foo.1", config); + fixture.AssertFullSemver("1.1.0-foo.1", configuration); fixture.ApplyTag("1.1.0-foo.1"); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.1.0", config); + fixture.AssertFullSemver("1.1.0", configuration); } [Test] public void MergeFeatureIntoMainlineWithMinorIncrementAndThenMergeHotfix() { - var config = new Config - { - VersioningMode = VersioningMode.Mainline, - Branches = new Dictionary - { - { "feature", new BranchConfig { Increment = IncrementStrategy.Minor } } - }, - Ignore = new IgnoreConfig { ShAs = new List() }, - MergeMessageFormats = new Dictionary() - }; + var configuration = TrunkBasedConfigurationBuilder.New.Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); fixture.ApplyTag("1.0.0"); - fixture.AssertFullSemver("1.0.0", config); + fixture.AssertFullSemver("1.0.0", configuration); fixture.BranchTo("feature/foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.0-foo.1", config); + fixture.AssertFullSemver("1.1.0-foo.1", configuration); fixture.ApplyTag("1.1.0-foo.1"); fixture.Checkout(MainBranch); fixture.MergeNoFF("feature/foo"); - fixture.AssertFullSemver("1.1.0", config); + fixture.AssertFullSemver("1.1.0", configuration); fixture.ApplyTag("1.1.0"); fixture.BranchTo("hotfix/bar"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.1.1-beta.1", config); - fixture.ApplyTag("1.1.1-beta.1"); + fixture.AssertFullSemver("1.1.1-bar.1", configuration); + fixture.ApplyTag("1.1.1-bar.1"); fixture.Checkout(MainBranch); fixture.MergeNoFF("hotfix/bar"); - fixture.AssertFullSemver("1.1.1", config); + fixture.AssertFullSemver("1.1.1", configuration); } [Test] - public void PreReleaseTagCanUseBranchNameVariable() + public void PreReleaseLabelCanUseBranchNameVariable() { - var config = new Config - { - NextVersion = "1.0.0", - Branches = new Dictionary - { - { - "custom", new BranchConfig - { - Regex = "custom/", - Tag = "alpha.{BranchName}", - SourceBranches = new HashSet() - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithNextVersion("1.0.0") + .WithBranch("custom", builder => builder + .WithRegularExpression("^custom?[/-](?.+)") + .WithLabel($"alpha.{ConfigurationConstants.BranchNamePlaceholder}") + .WithDeploymentMode(DeploymentMode.ManualDeployment) + .WithSourceBranches() + ) + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit(); @@ -290,54 +230,45 @@ public void PreReleaseTagCanUseBranchNameVariable() fixture.BranchTo("custom/foo"); fixture.MakeACommit(); - fixture.AssertFullSemver("1.0.0-alpha.foo.1+2", config); + fixture.AssertFullSemver("1.0.0-alpha.foo.1+3", configuration); } [Test] - public void PreReleaseNumberShouldBeScopeToPreReleaseLabelInContinuousDelivery() + public void PreReleaseNumberShouldBeScopeToPreReleaseLabelInManualDeployment() { - var config = new Config - { - VersioningMode = VersioningMode.ContinuousDelivery, - Branches = new Dictionary - { - { - MainBranch, new BranchConfig - { - Tag = "beta" - } - } - } - }; + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("main", builder => builder + .WithLabel("beta").WithDeploymentMode(DeploymentMode.ManualDeployment) + ).WithBranch("feature", builder => builder + .WithDeploymentMode(DeploymentMode.ManualDeployment) + ) + .Build(); using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); + fixture.MakeACommit(); - fixture.Repository.CreateBranch("feature/test"); - Commands.Checkout(fixture.Repository, "feature/test"); - fixture.Repository.MakeATaggedCommit("0.1.0-test.1"); - fixture.Repository.MakeACommit(); + fixture.BranchTo("feature/test"); + fixture.MakeATaggedCommit("0.1.0-test.1"); + fixture.MakeACommit(); - fixture.AssertFullSemver("0.1.0-test.2+2", config); + fixture.AssertFullSemver("0.1.0-test.2+1", configuration); - Commands.Checkout(fixture.Repository, MainBranch); + fixture.Checkout("main"); fixture.Repository.Merge("feature/test", Generate.SignatureNow()); - fixture.AssertFullSemver("0.1.0-beta.1+2", config); + fixture.AssertFullSemver("0.1.0-beta.1+3", configuration); } [Test] public void GetNextVersionOnNonMainlineBranchWithoutCommitsShouldWorkNormally() { - var config = new Config - { - VersioningMode = VersioningMode.Mainline, - NextVersion = "1.0.0" - }; + var configuration = TrunkBasedConfigurationBuilder.New + .WithNextVersion("1.0.0") + .Build(); using var fixture = new EmptyRepositoryFixture(); fixture.MakeACommit("initial commit"); fixture.BranchTo("feature/f1"); - fixture.AssertFullSemver("1.0.0-f1.0", config); + fixture.AssertFullSemver("1.0.0-f1.0", configuration); } } diff --git a/src/GitVersion.Core.Tests/VersionCalculation/SemanticVersionTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/SemanticVersionTests.cs index 6b0dee6ebb..6a59b13317 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/SemanticVersionTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/SemanticVersionTests.cs @@ -1,82 +1,71 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Model.Configuration; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; [TestFixture] public class SemanticVersionTests : TestBase { - [TestCase("1.2.3", 1, 2, 3, null, null, null, null, null, null, null, null)] - [TestCase("1.2", 1, 2, 0, null, null, null, null, null, null, "1.2.0", null)] - [TestCase("1.2.3-beta", 1, 2, 3, "beta", null, null, null, null, null, null, null)] - [TestCase("1.2.3-beta3", 1, 2, 3, "beta", 3, null, null, null, null, "1.2.3-beta.3", null)] - [TestCase("1.2.3-beta.3", 1, 2, 3, "beta", 3, null, null, null, null, "1.2.3-beta.3", null)] - [TestCase("1.2.3-beta-3", 1, 2, 3, "beta-3", null, null, null, null, null, "1.2.3-beta-3", null)] - [TestCase("1.2.3-alpha", 1, 2, 3, "alpha", null, null, null, null, null, null, null)] - [TestCase("1.2-alpha4", 1, 2, 0, "alpha", 4, null, null, null, null, "1.2.0-alpha.4", null)] - [TestCase("1.2.3-rc", 1, 2, 3, "rc", null, null, null, null, null, null, null)] - [TestCase("1.2.3-rc3", 1, 2, 3, "rc", 3, null, null, null, null, "1.2.3-rc.3", null)] - [TestCase("1.2.3-3", 1, 2, 3, "", 3, null, null, null, null, "1.2.3-3", null)] - [TestCase("1.2.3-RC3", 1, 2, 3, "RC", 3, null, null, null, null, "1.2.3-RC.3", null)] - [TestCase("1.2.3-rc3.1", 1, 2, 3, "rc3", 1, null, null, null, null, "1.2.3-rc3.1", null)] - [TestCase("01.02.03-rc03", 1, 2, 3, "rc", 3, null, null, null, null, "1.2.3-rc.3", null)] - [TestCase("1.2.3-beta3f", 1, 2, 3, "beta3f", null, null, null, null, null, null, null)] - [TestCase("1.2.3-notAStability1", 1, 2, 3, "notAStability", 1, null, null, null, null, "1.2.3-notAStability.1", null)] - [TestCase("1.2.3.4", 1, 2, 3, null, null, 4, null, null, null, "1.2.3+4", null)] - [TestCase("1.2.3+4", 1, 2, 3, null, null, 4, null, null, null, null, null)] - [TestCase("1.2.3+4.Branch.Foo", 1, 2, 3, null, null, 4, "Foo", null, null, null, null)] - [TestCase("1.2.3+randomMetaData", 1, 2, 3, null, null, null, null, null, "randomMetaData", null, null)] - [TestCase("1.2.3-beta.1+4.Sha.12234.Othershiz", 1, 2, 3, "beta", 1, 4, null, "12234", "Othershiz", null, null)] - [TestCase("1.2.3", 1, 2, 3, null, null, null, null, null, null, null, Config.DefaultTagPrefix)] - [TestCase("v1.2.3", 1, 2, 3, null, null, null, null, null, null, "1.2.3", Config.DefaultTagPrefix)] - [TestCase("V1.2.3", 1, 2, 3, null, null, null, null, null, null, "1.2.3", Config.DefaultTagPrefix)] - [TestCase("version-1.2.3", 1, 2, 3, null, null, null, null, null, null, "1.2.3", "version-")] - [TestCase("1", 1, 0, 0, null, null, null, null, null, null, "1.0.0", null)] - [TestCase("1.1", 1, 1, 0, null, null, null, null, null, null, "1.1.0", null)] - [TestCase("1.0.0-develop-20201007113711", 1, 0, 0, "develop-20201007113711", null, null, null, null, null, "1.0.0-develop-20201007113711", null)] - [TestCase("20201007113711.658165168461351.64136516984163213-develop-20201007113711.98848747823+65416321321", 20201007113711, 658165168461351, 64136516984163213, "develop-20201007113711", 98848747823, 65416321321, null, null, null, "20201007113711.658165168461351.64136516984163213-develop-20201007113711.98848747823+65416321321", null)] + [TestCase("1.2.3", 1, 2, 3, "", null, null, null, null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-beta", 1, 2, 3, "beta", null, null, null, null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-beta3", 1, 2, 3, "beta", 3, null, null, null, null, "1.2.3-beta.3", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-beta.3", 1, 2, 3, "beta", 3, null, null, null, null, "1.2.3-beta.3", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-beta-3", 1, 2, 3, "beta-3", null, null, null, null, null, "1.2.3-beta-3", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-alpha", 1, 2, 3, "alpha", null, null, null, null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-rc", 1, 2, 3, "rc", null, null, null, null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-rc3", 1, 2, 3, "rc", 3, null, null, null, null, "1.2.3-rc.3", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-3", 1, 2, 3, "", 3, null, null, null, null, "1.2.3-3", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-RC3", 1, 2, 3, "RC", 3, null, null, null, null, "1.2.3-RC.3", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-rc3.1", 1, 2, 3, "rc3", 1, null, null, null, null, "1.2.3-rc3.1", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-beta3f", 1, 2, 3, "beta3f", null, null, null, null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-notAStability1", 1, 2, 3, "notAStability", 1, null, null, null, null, "1.2.3-notAStability.1", null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3+4", 1, 2, 3, "", null, 4, null, null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3+4.Branch.Foo", 1, 2, 3, "", null, 4, "Foo", null, null, null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3+randomMetaData", 1, 2, 3, "", null, null, null, null, "randomMetaData", null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3-beta.1+4.Sha.12234.Othershiz", 1, 2, 3, "beta", 1, 4, null, "12234", "Othershiz", null, null, SemanticVersionFormat.Strict)] + [TestCase("1.2.3", 1, 2, 3, "", null, null, null, null, null, null, ConfigurationConstants.DefaultTagPrefix, SemanticVersionFormat.Strict)] + [TestCase("v1.2.3", 1, 2, 3, "", null, null, null, null, null, "1.2.3", ConfigurationConstants.DefaultTagPrefix, SemanticVersionFormat.Strict)] + [TestCase("V1.2.3", 1, 2, 3, "", null, null, null, null, null, "1.2.3", ConfigurationConstants.DefaultTagPrefix, SemanticVersionFormat.Strict)] + [TestCase("version-1.2.3", 1, 2, 3, "", null, null, null, null, null, "1.2.3", "version-", SemanticVersionFormat.Strict)] + [TestCase("1.0.0-develop-20201007113711", 1, 0, 0, "develop-20201007113711", null, null, null, null, null, "1.0.0-develop-20201007113711", null, SemanticVersionFormat.Strict)] + [TestCase("20201007113711.658165168461351.64136516984163213-develop-20201007113711.98848747823+65416321321", 20201007113711, 658165168461351, 64136516984163213, "develop-20201007113711", 98848747823, 65416321321, null, null, null, "20201007113711.658165168461351.64136516984163213-develop-20201007113711.98848747823+65416321321", null, SemanticVersionFormat.Strict)] + [TestCase("1.2", 1, 2, 0, "", null, null, null, null, null, "1.2.0", null, SemanticVersionFormat.Loose)] + [TestCase("1.2-alpha4", 1, 2, 0, "alpha", 4, null, null, null, null, "1.2.0-alpha.4", null, SemanticVersionFormat.Loose)] + [TestCase("01.02.03-rc03", 1, 2, 3, "rc", 3, null, null, null, null, "1.2.3-rc.3", null, SemanticVersionFormat.Loose)] + [TestCase("1.2.3.4", 1, 2, 3, "", null, 4, null, null, null, "1.2.3+4", null, SemanticVersionFormat.Loose)] + [TestCase("1", 1, 0, 0, "", null, null, null, null, null, "1.0.0", null, SemanticVersionFormat.Loose)] + [TestCase("1.1", 1, 1, 0, "", null, null, null, null, null, "1.1.0", null, SemanticVersionFormat.Loose)] public void ValidateVersionParsing( - string? versionString, long major, long minor, long patch, string? tag, long? tagNumber, long? numberOfBuilds, - string? branchName, string? sha, string? otherMetaData, string? fullFormattedVersionString, string? tagPrefixRegex) + string? versionString, long major, long minor, long patch, string label, long? tagNumber, long? numberOfBuilds, + string? branchName, string? sha, string? otherMetaData, string? fullFormattedVersionString, string? tagPrefixRegex, SemanticVersionFormat format = SemanticVersionFormat.Strict) { fullFormattedVersionString ??= versionString; versionString.ShouldNotBeNull(); - SemanticVersion.TryParse(versionString, tagPrefixRegex, out var version).ShouldBe(true, versionString); + SemanticVersion.TryParse(versionString, tagPrefixRegex, out var version, format).ShouldBe(true, versionString); version.ShouldNotBeNull(); - Assert.AreEqual(major, version.Major); - Assert.AreEqual(minor, version.Minor); - Assert.AreEqual(patch, version.Patch); - version.PreReleaseTag.ShouldNotBeNull(); - Assert.AreEqual(tag, version.PreReleaseTag.Name); - Assert.AreEqual(tagNumber, version.PreReleaseTag.Number); + Assert.Multiple(() => + { + Assert.That(version.Major, Is.EqualTo(major)); + Assert.That(version.Minor, Is.EqualTo(minor)); + Assert.That(version.Patch, Is.EqualTo(patch)); + Assert.That(version.PreReleaseTag.Name, Is.EqualTo(label)); + Assert.That(version.PreReleaseTag.Number, Is.EqualTo(tagNumber)); - version.BuildMetaData.ShouldNotBeNull(); - Assert.AreEqual(numberOfBuilds, version.BuildMetaData.CommitsSinceTag); - Assert.AreEqual(branchName, version.BuildMetaData.Branch); - Assert.AreEqual(sha, version.BuildMetaData.Sha); - Assert.AreEqual(otherMetaData, version.BuildMetaData.OtherMetaData); - Assert.AreEqual(fullFormattedVersionString, version.ToString("i")); + Assert.That(version.BuildMetaData.CommitsSinceTag, Is.EqualTo(numberOfBuilds)); + Assert.That(version.BuildMetaData.Branch, Is.EqualTo(branchName)); + Assert.That(version.BuildMetaData.Sha, Is.EqualTo(sha)); + Assert.That(version.BuildMetaData.OtherMetaData, Is.EqualTo(otherMetaData)); + Assert.That(version.ToString("i"), Is.EqualTo(fullFormattedVersionString)); + }); } [TestCase("someText")] [TestCase("some-T-ext")] - [TestCase("v.1.2.3", Config.DefaultTagPrefix)] + [TestCase("v.1.2.3", ConfigurationConstants.DefaultTagPrefix)] public void ValidateInvalidVersionParsing(string versionString, string? tagPrefixRegex = null) => - Assert.IsFalse(SemanticVersion.TryParse(versionString, tagPrefixRegex, out _), "TryParse Result"); - - [Test] - public void LegacySemVerTest() - { - new SemanticVersionPreReleaseTag("TKT-2134_JiraDescription", null).ToString("l").ShouldBe("TKT-2134"); - new SemanticVersionPreReleaseTag("AReallyReallyReallyLongBranchName", null).ToString("l").ShouldBe("AReallyReallyReallyL"); - new SemanticVersionPreReleaseTag("TKT-2134_JiraDescription", 1).ToString("lp").ShouldBe("TKT-2134-0001"); - new SemanticVersionPreReleaseTag("TKT-2134", 1).ToString("lp").ShouldBe("TKT-2134-0001"); - new SemanticVersionPreReleaseTag("AReallyReallyReallyLongBranchName", 1).ToString("lp").ShouldBe("AReallyReallyRea0001"); - } + Assert.That(SemanticVersion.TryParse(versionString, tagPrefixRegex, out _), Is.False, "TryParse Result"); [Test] public void VersionSorting() @@ -97,7 +86,7 @@ public void ToStringWithInvalidFormatTest() [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3-beta.4")] [TestCase(1, 2, 3, "beta", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-beta.4")] [TestCase(1, 2, 3, "", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-4")] - public string ToStringTests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) + public string ToStringTests(int major, int minor, int patch, string? preReleaseName, int? preReleaseVersion, int? buildCount, string? branchName, string? sha, string? otherMetadata) { var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); return semVer.ToString(); @@ -107,7 +96,7 @@ public string ToStringTests(int major, int minor, int patch, string preReleaseNa [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3-beta.4")] [TestCase(1, 2, 3, "beta", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-beta.4")] [TestCase(1, 2, 3, "", 4, 10, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-4")] - public string ToStringWithSFormatTests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) + public string ToStringWithSFormatTests(int major, int minor, int patch, string? preReleaseName, int? preReleaseVersion, int? buildCount, string? branchName, string? sha, string? otherMetadata) { var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); return semVer.ToString("s"); @@ -116,35 +105,17 @@ public string ToStringWithSFormatTests(int major, int minor, int patch, string p [TestCase(1, 2, 3, null, null, null, null, null, null, ExpectedResult = "1.2.3")] [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3")] [TestCase(1, 2, 3, "beta", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3")] - public string ToStringWithFormatJTests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) + public string ToStringWithFormatJTests(int major, int minor, int patch, string? preReleaseName, int? preReleaseVersion, int? buildCount, string? branchName, string? sha, string? otherMetadata) { var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); return semVer.ToString("j"); } - [TestCase(1, 2, 3, null, null, null, null, null, null, ExpectedResult = "1.2.3")] - [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3-beta4")] - [TestCase(1, 2, 3, "beta", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-beta4")] - public string ToStringWithFormatLTests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) - { - var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); - return semVer.ToString("l"); - } - - [TestCase(1, 2, 3, null, null, null, null, null, null, ExpectedResult = "1.2.3")] - [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3-beta0004")] - [TestCase(1, 2, 3, "beta", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-beta0004")] - public string ToStringWithFormatLpTests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) - { - var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); - return semVer.ToString("lp"); - } - [TestCase(1, 2, 3, null, null, null, null, null, null, ExpectedResult = "1.2.3")] [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3-beta.4")] [TestCase(1, 2, 3, "beta", 4, 5, null, null, null, ExpectedResult = "1.2.3-beta.4+5")] [TestCase(1, 2, 3, "", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-4+5")] - public string ToStringWithFormatFTests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) + public string ToStringWithFormatFTests(int major, int minor, int patch, string? preReleaseName, int? preReleaseVersion, int? buildCount, string? branchName, string? sha, string? otherMetadata) { var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); return semVer.ToString("f"); @@ -154,22 +125,25 @@ public string ToStringWithFormatFTests(int major, int minor, int patch, string p [TestCase(1, 2, 3, "beta", 4, null, null, null, null, ExpectedResult = "1.2.3-beta.4")] [TestCase(1, 2, 3, "beta", 4, 5, null, null, null, ExpectedResult = "1.2.3-beta.4+5")] [TestCase(1, 2, 3, "beta", 4, 5, "theBranch", "theSha", "theOtherMetaData", ExpectedResult = "1.2.3-beta.4+5.Branch.theBranch.Sha.theSha.theOtherMetaData")] - public string ToStringWithFormatITests(int major, int minor, int patch, string preReleaseName, int preReleaseVersion, int? buildCount, string branchName, string sha, string otherMetadata) + public string ToStringWithFormatITests(int major, int minor, int patch, string? preReleaseName, int? preReleaseVersion, int? buildCount, string? branchName, string? sha, string? otherMetadata) { var semVer = BuildSemVer(major, minor, patch, preReleaseName, preReleaseVersion, buildCount, branchName, sha, otherMetadata); return semVer.ToString("i"); } - private static SemanticVersion BuildSemVer(int major, int minor, int patch, string? preReleaseName, int preReleaseVersion, int? buildCount, string? branchName = null, string? sha = null, string? otherMetadata = null) + private static SemanticVersion BuildSemVer(int major, int minor, int patch, string? preReleaseName, int? preReleaseVersion, + int? buildCount, string? branchName = null, string? sha = null, string? otherMetadata = null) { - var semVer = new SemanticVersion(major, minor, patch); + SemanticVersionPreReleaseTag? preReleaseTag = null; if (preReleaseName != null) { - semVer.PreReleaseTag = new SemanticVersionPreReleaseTag(preReleaseName, preReleaseVersion); + preReleaseTag = new(preReleaseName, preReleaseVersion, true); } + + SemanticVersionBuildMetaData? buildMetaDate = null; if (buildCount.HasValue) { - semVer.BuildMetaData = new SemanticVersionBuildMetaData + buildMetaDate = new() { CommitsSinceTag = buildCount.Value, Sha = sha, @@ -178,6 +152,1390 @@ private static SemanticVersion BuildSemVer(int major, int minor, int patch, stri }; } - return semVer; + return new(major, minor, patch) + { + PreReleaseTag = preReleaseTag ?? SemanticVersionPreReleaseTag.Empty, + BuildMetaData = buildMetaDate ?? SemanticVersionBuildMetaData.Empty + }; + } + + [TestCase("0.0.0", VersionField.None, null, ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0", VersionField.Patch, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1", VersionField.None, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1", VersionField.Patch, null, ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1", VersionField.Patch, "", ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1", VersionField.Patch, "foo", ExpectedResult = "0.0.2-foo.1")] + [TestCase("0.0.1", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0", VersionField.None, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0", VersionField.Patch, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.0", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1", VersionField.None, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1", VersionField.Patch, null, ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1", VersionField.Patch, "", ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1", VersionField.Patch, "foo", ExpectedResult = "0.1.2-foo.1")] + [TestCase("0.1.1", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0", VersionField.None, null, ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0", VersionField.Patch, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.0.1", VersionField.None, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1", VersionField.Patch, null, ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1", VersionField.Patch, "", ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1", VersionField.Patch, "foo", ExpectedResult = "1.0.2-foo.1")] + [TestCase("1.0.1", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0", VersionField.None, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0", VersionField.Patch, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.0", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1", VersionField.None, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1", VersionField.Patch, null, ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1", VersionField.Patch, "", ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1", VersionField.Patch, "foo", ExpectedResult = "1.1.2-foo.1")] + [TestCase("1.1.1", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingVersion(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0", VersionField.None, null, ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0", VersionField.Patch, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1", VersionField.None, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1", VersionField.Patch, null, ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1", VersionField.Patch, "", ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1", VersionField.Patch, "foo", ExpectedResult = "0.0.2-foo.1")] + [TestCase("0.0.1", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0", VersionField.None, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0", VersionField.Patch, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.0", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1", VersionField.None, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1", VersionField.Patch, null, ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1", VersionField.Patch, "", ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1", VersionField.Patch, "foo", ExpectedResult = "0.1.2-foo.1")] + [TestCase("0.1.1", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0", VersionField.None, null, ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0", VersionField.Patch, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.0.1", VersionField.None, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1", VersionField.Patch, null, ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1", VersionField.Patch, "", ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1", VersionField.Patch, "foo", ExpectedResult = "1.0.2-foo.1")] + [TestCase("1.0.1", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0", VersionField.None, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0", VersionField.Patch, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.0", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1", VersionField.None, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1", VersionField.Patch, null, ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1", VersionField.Patch, "", ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1", VersionField.Patch, "foo", ExpectedResult = "1.1.2-foo.1")] + [TestCase("1.1.1", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingVersionInModeEnsureIntegrity(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.EnsureIntegrity); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0", VersionField.None, null, ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0", VersionField.Patch, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1", VersionField.None, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1", VersionField.Patch, null, ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1", VersionField.Patch, "", ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1", VersionField.Patch, "foo", ExpectedResult = "0.0.2-foo.1")] + [TestCase("0.0.1", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0", VersionField.None, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0", VersionField.Patch, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.0", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1", VersionField.None, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1", VersionField.Patch, null, ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1", VersionField.Patch, "", ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1", VersionField.Patch, "foo", ExpectedResult = "0.1.2-foo.1")] + [TestCase("0.1.1", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0", VersionField.None, null, ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0", VersionField.Patch, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.0.1", VersionField.None, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1", VersionField.Patch, null, ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1", VersionField.Patch, "", ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1", VersionField.Patch, "foo", ExpectedResult = "1.0.2-foo.1")] + [TestCase("1.0.1", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0", VersionField.None, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0", VersionField.Patch, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.0", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1", VersionField.None, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1", VersionField.Patch, null, ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1", VersionField.Patch, "", ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1", VersionField.Patch, "foo", ExpectedResult = "1.1.2-foo.1")] + [TestCase("1.1.1", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingVersionInModeForce(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.Force); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-2", VersionField.None, null, ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Patch, null, ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Minor, null, ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Major, null, ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.None, "", ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Patch, "", ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Minor, "", ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Major, "", ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Patch, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Minor, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Major, "foo", ExpectedResult = "0.0.0-foo.1")] + + [TestCase("0.0.1-2", VersionField.None, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Patch, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Minor, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Major, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.None, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Patch, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Minor, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Major, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1-2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1-2", VersionField.Minor, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1-2", VersionField.Major, "foo", ExpectedResult = "0.0.1-foo.1")] + + [TestCase("0.1.0-2", VersionField.None, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Patch, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Minor, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Major, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.None, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Patch, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Minor, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Major, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Patch, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Major, "foo", ExpectedResult = "0.1.0-foo.1")] + + [TestCase("0.1.1-2", VersionField.None, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Patch, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Minor, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Major, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.None, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Patch, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Minor, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Major, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1-2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1-2", VersionField.Minor, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1-2", VersionField.Major, "foo", ExpectedResult = "0.1.1-foo.1")] + + [TestCase("1.0.0-2", VersionField.None, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Patch, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Minor, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Major, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.None, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Patch, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Minor, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Major, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Patch, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Minor, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.1-2", VersionField.None, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Patch, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Minor, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Major, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.None, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Patch, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Minor, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Major, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1-2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1-2", VersionField.Minor, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1-2", VersionField.Major, "foo", ExpectedResult = "1.0.1-foo.1")] + + [TestCase("1.1.0-2", VersionField.None, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Patch, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Minor, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Major, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.None, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Patch, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Minor, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Major, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Patch, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Major, "foo", ExpectedResult = "1.1.0-foo.1")] + + [TestCase("1.1.1-2", VersionField.None, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Patch, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Minor, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Major, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.None, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Patch, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Minor, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Major, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1-2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1-2", VersionField.Minor, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1-2", VersionField.Major, "foo", ExpectedResult = "1.1.1-foo.1")] + public string WhenIncrementingPreReleaseVersion(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-2", VersionField.None, null, ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Patch, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-2", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-2", VersionField.None, "", ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-2", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0-2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1-2", VersionField.None, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Patch, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-2", VersionField.None, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Patch, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-2", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1-2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1-2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0-2", VersionField.None, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Patch, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-2", VersionField.Minor, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-2", VersionField.None, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-2", VersionField.Minor, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-2", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0-2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1-2", VersionField.None, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Patch, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-2", VersionField.None, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Patch, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-2", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1-2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1-2", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0-2", VersionField.None, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Patch, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-2", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-2", VersionField.Major, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.None, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-2", VersionField.Major, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0-2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.1-2", VersionField.None, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Patch, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-2", VersionField.None, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Patch, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-2", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1-2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1-2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0-2", VersionField.None, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Patch, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-2", VersionField.Minor, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-2", VersionField.None, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-2", VersionField.Minor, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-2", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0-2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1-2", VersionField.None, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Patch, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-2", VersionField.None, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Patch, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-2", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1-2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1-2", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingPreReleaseVersionInModeEnsureIntegrity(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.EnsureIntegrity); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-2", VersionField.None, null, ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Patch, null, ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-2", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-2", VersionField.None, "", ExpectedResult = "0.0.0-3")] + [TestCase("0.0.0-2", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-2", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0-2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1-2", VersionField.None, null, ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Patch, null, ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1-2", VersionField.Minor, null, ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-2", VersionField.None, "", ExpectedResult = "0.0.1-3")] + [TestCase("0.0.1-2", VersionField.Patch, "", ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1-2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-2", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.1-2", VersionField.Patch, "foo", ExpectedResult = "0.0.2-foo.1")] + [TestCase("0.0.1-2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0-2", VersionField.None, null, ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Patch, null, ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-2", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-2", VersionField.None, "", ExpectedResult = "0.1.0-3")] + [TestCase("0.1.0-2", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-2", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-2", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0-2", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.0-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1-2", VersionField.None, null, ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Patch, null, ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1-2", VersionField.Minor, null, ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-2", VersionField.Major, null, ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-2", VersionField.None, "", ExpectedResult = "0.1.1-3")] + [TestCase("0.1.1-2", VersionField.Patch, "", ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1-2", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-2", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.1-2", VersionField.Patch, "foo", ExpectedResult = "0.1.2-foo.1")] + [TestCase("0.1.1-2", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1-2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0-2", VersionField.None, null, ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Patch, null, ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-2", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0-2", VersionField.None, "", ExpectedResult = "1.0.0-3")] + [TestCase("1.0.0-2", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0-2", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0-2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.0.1-2", VersionField.None, null, ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Patch, null, ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1-2", VersionField.Minor, null, ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-2", VersionField.None, "", ExpectedResult = "1.0.1-3")] + [TestCase("1.0.1-2", VersionField.Patch, "", ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1-2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-2", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.1-2", VersionField.Patch, "foo", ExpectedResult = "1.0.2-foo.1")] + [TestCase("1.0.1-2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0-2", VersionField.None, null, ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Patch, null, ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-2", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-2", VersionField.None, "", ExpectedResult = "1.1.0-3")] + [TestCase("1.1.0-2", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-2", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-2", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0-2", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.0-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1-2", VersionField.None, null, ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Patch, null, ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1-2", VersionField.Minor, null, ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-2", VersionField.Major, null, ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-2", VersionField.None, "", ExpectedResult = "1.1.1-3")] + [TestCase("1.1.1-2", VersionField.Patch, "", ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1-2", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-2", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.1-2", VersionField.Patch, "foo", ExpectedResult = "1.1.2-foo.1")] + [TestCase("1.1.1-2", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1-2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingPreReleaseVersionInModeForce(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.Force); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-foo.2", VersionField.None, null, ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Patch, null, ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Minor, null, ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Major, null, ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Patch, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Major, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Major, "foo", ExpectedResult = "0.0.0-foo.3")] + + [TestCase("0.0.1-foo.2", VersionField.None, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Patch, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Minor, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Major, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.Minor, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.Major, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Major, "foo", ExpectedResult = "0.0.1-foo.3")] + + [TestCase("0.1.0-foo.2", VersionField.None, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Patch, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Major, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Patch, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Major, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Major, "foo", ExpectedResult = "0.1.0-foo.3")] + + [TestCase("0.1.1-foo.2", VersionField.None, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Patch, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Major, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.Major, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Major, "foo", ExpectedResult = "0.1.1-foo.3")] + + [TestCase("1.0.0-foo.2", VersionField.None, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Patch, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Minor, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Patch, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.3")] + + [TestCase("1.0.1-foo.2", VersionField.None, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Patch, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Minor, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Major, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.Minor, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.Major, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.1-foo.3")] + + [TestCase("1.1.0-foo.2", VersionField.None, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Patch, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Major, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Patch, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Major, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.1.0-foo.3")] + + [TestCase("1.1.1-foo.2", VersionField.None, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Patch, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Major, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.Major, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Major, "foo", ExpectedResult = "1.1.1-foo.3")] + public string WhenIncrementingPreReleaseVersionFoo(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-foo.2", VersionField.None, null, ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Patch, null, ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1-foo.2", VersionField.None, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Patch, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-foo.2", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0-foo.2", VersionField.None, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Patch, null, ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-foo.2", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1-foo.2", VersionField.None, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Patch, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Minor, null, ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-foo.2", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0-foo.2", VersionField.None, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Patch, null, ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.3")] + + [TestCase("1.0.1-foo.2", VersionField.None, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Patch, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-foo.2", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0-foo.2", VersionField.None, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Patch, null, ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-foo.2", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1-foo.2", VersionField.None, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Patch, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Minor, null, ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-foo.2", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingPreReleaseVersionFooInModeEnsureIntegrity(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.EnsureIntegrity); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-foo.2", VersionField.None, null, ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Patch, null, ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-foo.2", VersionField.None, "foo", ExpectedResult = "0.0.0-foo.3")] + [TestCase("0.0.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.0.1-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.0.1-foo.2", VersionField.None, null, ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Patch, null, ExpectedResult = "0.0.2-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.Minor, null, ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-foo.2", VersionField.Patch, "", ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1-foo.2", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-foo.2", VersionField.None, "foo", ExpectedResult = "0.0.1-foo.3")] + [TestCase("0.0.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.0.2-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.1.0-foo.1")] + [TestCase("0.0.1-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.0-foo.2", VersionField.None, null, ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Patch, null, ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, null, ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-foo.2", VersionField.None, "foo", ExpectedResult = "0.1.0-foo.3")] + [TestCase("0.1.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.1.1-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.0-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("0.1.1-foo.2", VersionField.None, null, ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Patch, null, ExpectedResult = "0.1.2-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.Minor, null, ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.Major, null, ExpectedResult = "1.0.0-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-foo.2", VersionField.Patch, "", ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1-foo.2", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-foo.2", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-foo.2", VersionField.None, "foo", ExpectedResult = "0.1.1-foo.3")] + [TestCase("0.1.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "0.1.2-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "0.2.0-foo.1")] + [TestCase("0.1.1-foo.2", VersionField.Major, "foo", ExpectedResult = "1.0.0-foo.1")] + + [TestCase("1.0.0-foo.2", VersionField.None, null, ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Patch, null, ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0-foo.2", VersionField.None, "foo", ExpectedResult = "1.0.0-foo.3")] + [TestCase("1.0.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.0.1-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.0-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.0.1-foo.2", VersionField.None, null, ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Patch, null, ExpectedResult = "1.0.2-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.Minor, null, ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-foo.2", VersionField.Patch, "", ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1-foo.2", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-foo.2", VersionField.None, "foo", ExpectedResult = "1.0.1-foo.3")] + [TestCase("1.0.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.0.2-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.1.0-foo.1")] + [TestCase("1.0.1-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.0-foo.2", VersionField.None, null, ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Patch, null, ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, null, ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-foo.2", VersionField.None, "foo", ExpectedResult = "1.1.0-foo.3")] + [TestCase("1.1.0-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.1.1-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.0-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + + [TestCase("1.1.1-foo.2", VersionField.None, null, ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Patch, null, ExpectedResult = "1.1.2-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.Minor, null, ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.Major, null, ExpectedResult = "2.0.0-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-foo.2", VersionField.Patch, "", ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1-foo.2", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-foo.2", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-foo.2", VersionField.None, "foo", ExpectedResult = "1.1.1-foo.3")] + [TestCase("1.1.1-foo.2", VersionField.Patch, "foo", ExpectedResult = "1.1.2-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.Minor, "foo", ExpectedResult = "1.2.0-foo.1")] + [TestCase("1.1.1-foo.2", VersionField.Major, "foo", ExpectedResult = "2.0.0-foo.1")] + public string WhenIncrementingPreReleaseVersionFooInModeForce(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.Force); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-bar", VersionField.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Patch, null, ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Minor, null, ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Major, null, ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-bar", VersionField.Patch, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-bar", VersionField.Minor, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-bar", VersionField.Major, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-bar", VersionField.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Patch, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Minor, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Major, "bar", ExpectedResult = "0.0.0-bar")] + + [TestCase("0.0.1-bar", VersionField.None, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Patch, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Minor, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Major, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.Minor, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.Major, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.None, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Patch, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Minor, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Major, "bar", ExpectedResult = "0.0.1-bar")] + + [TestCase("0.1.0-bar", VersionField.None, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Patch, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Minor, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Major, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.Patch, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.Major, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.None, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Patch, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Major, "bar", ExpectedResult = "0.1.0-bar")] + + [TestCase("0.1.1-bar", VersionField.None, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Patch, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Minor, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Major, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.Minor, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.Major, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.None, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Patch, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Major, "bar", ExpectedResult = "0.1.1-bar")] + + [TestCase("1.0.0-bar", VersionField.None, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Patch, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Minor, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.Patch, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.Minor, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.None, "bar", ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Patch, "bar", ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Minor, "bar", ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("1.0.1-bar", VersionField.None, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Patch, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Minor, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Major, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.Minor, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.Major, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.None, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Patch, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Minor, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Major, "bar", ExpectedResult = "1.0.1-bar")] + + [TestCase("1.1.0-bar", VersionField.None, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Patch, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Minor, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Major, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.Patch, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.Major, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.None, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Patch, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Major, "bar", ExpectedResult = "1.1.0-bar")] + + [TestCase("1.1.1-bar", VersionField.None, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Patch, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Minor, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Major, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.Minor, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.Major, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.None, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Patch, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Major, "bar", ExpectedResult = "1.1.1-bar")] + public string WhenIncrementingPreReleaseVersionBar(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-bar", VersionField.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Patch, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.0-bar", VersionField.Minor, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.0-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-bar", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-bar", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-bar", VersionField.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Patch, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.0-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.0-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("0.0.1-bar", VersionField.None, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Patch, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Minor, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.1-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.0.1-bar", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-bar", VersionField.None, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Patch, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.1-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("0.1.0-bar", VersionField.None, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Patch, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.0-bar", VersionField.Minor, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.1.0-bar", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-bar", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-bar", VersionField.None, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Patch, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.0-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("0.1.1-bar", VersionField.None, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Patch, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Minor, null, ExpectedResult = "0.2.0-bar")] + [TestCase("0.1.1-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.1.1-bar", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-bar", VersionField.None, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Patch, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Minor, "bar", ExpectedResult = "0.2.0-bar")] + [TestCase("0.1.1-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("1.0.0-bar", VersionField.None, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Patch, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.0-bar", VersionField.Minor, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.0-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-bar", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.None, "bar", ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Patch, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.0-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.0-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("1.0.1-bar", VersionField.None, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Patch, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Minor, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.1-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.0.1-bar", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-bar", VersionField.None, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Patch, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.1-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + + [TestCase("1.1.0-bar", VersionField.None, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Patch, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.0-bar", VersionField.Minor, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.1.0-bar", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-bar", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-bar", VersionField.None, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Patch, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.0-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + + [TestCase("1.1.1-bar", VersionField.None, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Patch, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Minor, null, ExpectedResult = "1.2.0-bar")] + [TestCase("1.1.1-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.1.1-bar", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-bar", VersionField.None, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Patch, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Minor, "bar", ExpectedResult = "1.2.0-bar")] + [TestCase("1.1.1-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + public string WhenIncrementingPreReleaseVersionBarInModeEnsureIntegrity(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.EnsureIntegrity); + + // Assert + return result.ToString("i"); + } + + [TestCase("0.0.0-bar", VersionField.None, null, ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Patch, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.0-bar", VersionField.Minor, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.0-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.None, "", ExpectedResult = "0.0.0-1")] + [TestCase("0.0.0-bar", VersionField.Patch, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.0-bar", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.0-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.0-bar", VersionField.None, "bar", ExpectedResult = "0.0.0-bar")] + [TestCase("0.0.0-bar", VersionField.Patch, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.0-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.0-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("0.0.1-bar", VersionField.None, null, ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Patch, null, ExpectedResult = "0.0.2-bar")] + [TestCase("0.0.1-bar", VersionField.Minor, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.1-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.0.1-bar", VersionField.None, "", ExpectedResult = "0.0.1-1")] + [TestCase("0.0.1-bar", VersionField.Patch, "", ExpectedResult = "0.0.2-1")] + [TestCase("0.0.1-bar", VersionField.Minor, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.0.1-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.0.1-bar", VersionField.None, "bar", ExpectedResult = "0.0.1-bar")] + [TestCase("0.0.1-bar", VersionField.Patch, "bar", ExpectedResult = "0.0.2-bar")] + [TestCase("0.0.1-bar", VersionField.Minor, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.0.1-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("0.1.0-bar", VersionField.None, null, ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Patch, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.0-bar", VersionField.Minor, null, ExpectedResult = "0.2.0-bar")] + [TestCase("0.1.0-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.1.0-bar", VersionField.None, "", ExpectedResult = "0.1.0-1")] + [TestCase("0.1.0-bar", VersionField.Patch, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.0-bar", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.0-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.0-bar", VersionField.None, "bar", ExpectedResult = "0.1.0-bar")] + [TestCase("0.1.0-bar", VersionField.Patch, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.0-bar", VersionField.Minor, "bar", ExpectedResult = "0.2.0-bar")] + [TestCase("0.1.0-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("0.1.1-bar", VersionField.None, null, ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Patch, null, ExpectedResult = "0.1.2-bar")] + [TestCase("0.1.1-bar", VersionField.Minor, null, ExpectedResult = "0.2.0-bar")] + [TestCase("0.1.1-bar", VersionField.Major, null, ExpectedResult = "1.0.0-bar")] + [TestCase("0.1.1-bar", VersionField.None, "", ExpectedResult = "0.1.1-1")] + [TestCase("0.1.1-bar", VersionField.Patch, "", ExpectedResult = "0.1.2-1")] + [TestCase("0.1.1-bar", VersionField.Minor, "", ExpectedResult = "0.2.0-1")] + [TestCase("0.1.1-bar", VersionField.Major, "", ExpectedResult = "1.0.0-1")] + [TestCase("0.1.1-bar", VersionField.None, "bar", ExpectedResult = "0.1.1-bar")] + [TestCase("0.1.1-bar", VersionField.Patch, "bar", ExpectedResult = "0.1.2-bar")] + [TestCase("0.1.1-bar", VersionField.Minor, "bar", ExpectedResult = "0.2.0-bar")] + [TestCase("0.1.1-bar", VersionField.Major, "bar", ExpectedResult = "1.0.0-bar")] + + [TestCase("1.0.0-bar", VersionField.None, null, ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Patch, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.0-bar", VersionField.Minor, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.0-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.None, "", ExpectedResult = "1.0.0-1")] + [TestCase("1.0.0-bar", VersionField.Patch, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.0-bar", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.0-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.0-bar", VersionField.None, "bar", ExpectedResult = "1.0.0-bar")] + [TestCase("1.0.0-bar", VersionField.Patch, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.0-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.0-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + + [TestCase("1.0.1-bar", VersionField.None, null, ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Patch, null, ExpectedResult = "1.0.2-bar")] + [TestCase("1.0.1-bar", VersionField.Minor, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.1-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.0.1-bar", VersionField.None, "", ExpectedResult = "1.0.1-1")] + [TestCase("1.0.1-bar", VersionField.Patch, "", ExpectedResult = "1.0.2-1")] + [TestCase("1.0.1-bar", VersionField.Minor, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.0.1-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.0.1-bar", VersionField.None, "bar", ExpectedResult = "1.0.1-bar")] + [TestCase("1.0.1-bar", VersionField.Patch, "bar", ExpectedResult = "1.0.2-bar")] + [TestCase("1.0.1-bar", VersionField.Minor, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.0.1-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + + [TestCase("1.1.0-bar", VersionField.None, null, ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Patch, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.0-bar", VersionField.Minor, null, ExpectedResult = "1.2.0-bar")] + [TestCase("1.1.0-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.1.0-bar", VersionField.None, "", ExpectedResult = "1.1.0-1")] + [TestCase("1.1.0-bar", VersionField.Patch, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.0-bar", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.0-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.0-bar", VersionField.None, "bar", ExpectedResult = "1.1.0-bar")] + [TestCase("1.1.0-bar", VersionField.Patch, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.0-bar", VersionField.Minor, "bar", ExpectedResult = "1.2.0-bar")] + [TestCase("1.1.0-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + + [TestCase("1.1.1-bar", VersionField.None, null, ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Patch, null, ExpectedResult = "1.1.2-bar")] + [TestCase("1.1.1-bar", VersionField.Minor, null, ExpectedResult = "1.2.0-bar")] + [TestCase("1.1.1-bar", VersionField.Major, null, ExpectedResult = "2.0.0-bar")] + [TestCase("1.1.1-bar", VersionField.None, "", ExpectedResult = "1.1.1-1")] + [TestCase("1.1.1-bar", VersionField.Patch, "", ExpectedResult = "1.1.2-1")] + [TestCase("1.1.1-bar", VersionField.Minor, "", ExpectedResult = "1.2.0-1")] + [TestCase("1.1.1-bar", VersionField.Major, "", ExpectedResult = "2.0.0-1")] + [TestCase("1.1.1-bar", VersionField.None, "bar", ExpectedResult = "1.1.1-bar")] + [TestCase("1.1.1-bar", VersionField.Patch, "bar", ExpectedResult = "1.1.2-bar")] + [TestCase("1.1.1-bar", VersionField.Minor, "bar", ExpectedResult = "1.2.0-bar")] + [TestCase("1.1.1-bar", VersionField.Major, "bar", ExpectedResult = "2.0.0-bar")] + public string WhenIncrementingPreReleaseVersionBarInModeForce(string value, VersionField increment, string? label) + { + // Arrange + var semanticVersion = SemanticVersion.Parse(value, null); + + // Act + var result = semanticVersion.Increment(increment, label, SemanticVersion.IncrementMode.Force); + + // Assert + return result.ToString("i"); } } diff --git a/src/GitVersion.Core.Tests/VersionCalculation/ShaVersionFilterTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/ShaVersionFilterTests.cs index 9a07c7311e..86be277b52 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/ShaVersionFilterTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/ShaVersionFilterTests.cs @@ -1,7 +1,5 @@ using GitVersion.Core.Tests.Helpers; using GitVersion.VersionCalculation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -9,7 +7,7 @@ namespace GitVersion.Core.Tests; public class ShaVersionFilterTests : TestBase { [Test] - public void VerifyNullGuard2() + public void VerifyNullGuard() { var commit = GitToolsTestingExtensions.CreateMockCommit(); var sut = new ShaVersionFilter(new[] { commit.Sha }); @@ -21,7 +19,7 @@ public void VerifyNullGuard2() public void WhenShaMatchShouldExcludeWithReason() { var commit = GitToolsTestingExtensions.CreateMockCommit(); - var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); + BaseVersion version = new("dummy", new SemanticVersion(1), commit); var sut = new ShaVersionFilter(new[] { commit.Sha }); sut.Exclude(version, out var reason).ShouldBeTrue(); @@ -32,8 +30,8 @@ public void WhenShaMatchShouldExcludeWithReason() public void WhenShaMismatchShouldNotExclude() { var commit = GitToolsTestingExtensions.CreateMockCommit(); - var version = new BaseVersion("dummy", false, new SemanticVersion(1), commit, string.Empty); - var sut = new ShaVersionFilter(new[] { "mismatched" }); + BaseVersion version = new("dummy", new SemanticVersion(1), commit); + var sut = new ShaVersionFilter(["mismatched"]); sut.Exclude(version, out var reason).ShouldBeFalse(); reason.ShouldBeNull(); @@ -42,8 +40,8 @@ public void WhenShaMismatchShouldNotExclude() [Test] public void ExcludeShouldAcceptVersionWithNullCommit() { - var version = new BaseVersion("dummy", false, new SemanticVersion(1), null, string.Empty); - var sut = new ShaVersionFilter(new[] { "mismatched" }); + BaseVersion version = new("dummy", new SemanticVersion(1)); + var sut = new ShaVersionFilter(["mismatched"]); sut.Exclude(version, out var reason).ShouldBeFalse(); reason.ShouldBeNull(); diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs deleted file mode 100644 index 24d9abd155..0000000000 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/ConfigNextVersionBaseVersionStrategyTests.cs +++ /dev/null @@ -1,57 +0,0 @@ -using GitVersion.Configuration; -using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; -using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; - -namespace GitVersion.Core.Tests.VersionCalculation.Strategies; - -[TestFixture] -public class ConfigNextVersionBaseVersionStrategyTests : TestBase -{ - [Test] - public void ReturnsNullWhenNoNextVersionIsInConfig() - { - var baseVersion = GetBaseVersion(); - - baseVersion.ShouldBe(null); - } - - [TestCase("1.0.0", "1.0.0")] - [TestCase("2", "2.0.0")] - [TestCase("2.118998723", "2.118998723.0")] - [TestCase("2.12.654651698", "2.12.654651698")] - public void ConfigNextVersionTest(string nextVersion, string expectedVersion) - { - var baseVersion = GetBaseVersion(new Config - { - NextVersion = nextVersion - }); - - baseVersion.ShouldNotBeNull(); - baseVersion.ShouldIncrement.ShouldBe(false); - baseVersion.SemanticVersion.ToString().ShouldBe(expectedVersion); - } - - private static BaseVersion? GetBaseVersion(Config? config = null) - { - var contextBuilder = new GitVersionContextBuilder(); - - if (config != null) - { - contextBuilder = contextBuilder.WithConfig(config); - } - - contextBuilder.Build(); - contextBuilder.ServicesProvider.ShouldNotBeNull(); - var strategy = contextBuilder.ServicesProvider.GetServiceForType(); - var context = contextBuilder.ServicesProvider.GetRequiredService>().Value; - var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); - var branchConfiguration = context.FullConfiguration.GetBranchConfiguration(branchMock); - var effectiveConfiguration = new EffectiveConfiguration(context.FullConfiguration, branchConfiguration); - return strategy.GetBaseVersions(new(branchMock, effectiveConfiguration)).SingleOrDefault(); - } -} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/ConfiguredNextVersionVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/ConfiguredNextVersionVersionStrategyTests.cs new file mode 100644 index 0000000000..369124aae4 --- /dev/null +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/ConfiguredNextVersionVersionStrategyTests.cs @@ -0,0 +1,89 @@ +using GitVersion.Configuration; +using GitVersion.Core.Tests.Helpers; +using GitVersion.Extensions; +using GitVersion.VersionCalculation; +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.Core.Tests.VersionCalculation.Strategies; + +[TestFixture] +public class ConfiguredNextVersionVersionStrategyTests : TestBase +{ + [Test] + public void ReturnsNullWhenNoNextVersionIsInConfig() + { + var baseVersion = GetBaseVersion(); + + baseVersion.ShouldBe(null); + } + + [TestCase("1.0.0", "1.0.0", SemanticVersionFormat.Strict, "1.0.0-1")] + [TestCase("1.0.0", "1.0.0", SemanticVersionFormat.Loose, "1.0.0-1")] + [TestCase("2.12.654651698", "2.12.654651698", SemanticVersionFormat.Strict, "2.12.654651698-1")] + [TestCase("2.12.654651698", "2.12.654651698", SemanticVersionFormat.Loose, "2.12.654651698-1")] + [TestCase("0.1", "0.1.0", SemanticVersionFormat.Loose, "0.1.0-1")] + [TestCase("1.0.0-alpha.1", null, SemanticVersionFormat.Strict, null)] + [TestCase("1.0.0-2", "1.0.0-2", SemanticVersionFormat.Strict, "1.0.0-2")] + public void ConfiguredNextVersionTest( + string nextVersion, string? semanticVersion, SemanticVersionFormat versionFormat, string? incrementedVersion) + { + var overrideConfiguration = new Dictionary + { + { "next-version", nextVersion }, + { "semantic-version-format", versionFormat } + }; + var baseVersion = GetBaseVersion(overrideConfiguration); + + if (semanticVersion.IsNullOrEmpty()) + { + baseVersion.ShouldBeNull(); + return; + } + + baseVersion.ShouldNotBeNull(); + baseVersion.SemanticVersion.ToString().ShouldBe(semanticVersion); + baseVersion.BaseVersionSource.ShouldBeNull(); + + var shouldBeIncremented = semanticVersion != incrementedVersion; + baseVersion.ShouldIncrement.ShouldBe(shouldBeIncremented); + if (shouldBeIncremented) + { + baseVersion.Operator.ShouldNotBeNull(); + baseVersion.Operator!.Label.ShouldBe(string.Empty); + baseVersion.Operator.ForceIncrement.ShouldBe(false); + baseVersion.Operator.Increment.ShouldBe(VersionField.None); + baseVersion.Operator.BaseVersionSource.ShouldBeNull(); + } + else + { + baseVersion.Operator.ShouldBeNull(); + } + baseVersion.GetIncrementedVersion().ToString().ShouldBe(incrementedVersion); + } + + [TestCase("0.1", SemanticVersionFormat.Strict)] + public void ConfiguredNextVersionTestShouldFail(string nextVersion, SemanticVersionFormat versionFormat) + { + var overrideConfiguration = new Dictionary + { + { "next-version", nextVersion }, + { "semantic-version-format", versionFormat } + }; + + Should.Throw(() => GetBaseVersion(overrideConfiguration)) + .Message.ShouldBe($"Failed to parse {nextVersion} into a Semantic Version"); + } + + private static BaseVersion? GetBaseVersion(IReadOnlyDictionary? overrideConfiguration = null) + { + using var contextBuilder = new GitVersionContextBuilder().WithOverrideConfiguration(overrideConfiguration); + contextBuilder.Build(); + contextBuilder.ServicesProvider.ShouldNotBeNull(); + var strategy = contextBuilder.ServicesProvider.GetServiceForType(); + var context = contextBuilder.ServicesProvider.GetRequiredService>().Value; + var branchMock = GitToolsTestingExtensions.CreateMockBranch("main", GitToolsTestingExtensions.CreateMockCommit()); + + strategy.ShouldNotBeNull(); + return strategy.GetBaseVersions(context.Configuration.GetEffectiveBranchConfiguration(branchMock)).SingleOrDefault(); + } +} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs index a2ca9409ae..0f34c39434 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/MergeMessageBaseVersionStrategyTests.cs @@ -1,12 +1,9 @@ using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NSubstitute; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.VersionCalculation.Strategies; @@ -24,26 +21,24 @@ public void ShouldNotAllowIncrementOfVersion() var mockBranch = GitToolsTestingExtensions.CreateMockBranch(MainBranch, mockCommit); var branches = Substitute.For(); - branches.GetEnumerator().Returns(_ => ((IEnumerable)new[] - { - mockBranch - }).GetEnumerator()); + branches.MockCollectionReturn(mockBranch); var mockRepository = Substitute.For(); mockRepository.Head.Returns(mockBranch); mockRepository.Branches.Returns(branches); mockRepository.Commits.Returns(mockBranch.Commits); - var contextBuilder = new GitVersionContextBuilder().WithRepository(mockRepository); + using var contextBuilder = new GitVersionContextBuilder().WithRepository(mockRepository); contextBuilder.Build(); contextBuilder.ServicesProvider.ShouldNotBeNull(); var strategy = contextBuilder.ServicesProvider.GetServiceForType(); var context = contextBuilder.ServicesProvider.GetRequiredService>().Value; - var branchConfiguration = context.FullConfiguration.GetBranchConfiguration(mockBranch); - var effectiveConfiguration = new EffectiveConfiguration(context.FullConfiguration, branchConfiguration); - var baseVersion = strategy.GetBaseVersions(new(mockBranch, effectiveConfiguration)).Single(); - baseVersion.ShouldIncrement.ShouldBe(false); + strategy.ShouldNotBeNull(); + var configuration = context.Configuration.GetEffectiveBranchConfiguration(mockBranch); + var baseVersion = strategy.GetBaseVersions(configuration).Single(); + + baseVersion.GetIncrementedVersion().ToString().ShouldBe("0.1.5-1"); } [TestCase("Merge branch 'release-10.10.50'", true, "10.10.50")] @@ -57,9 +52,9 @@ public void ShouldNotAllowIncrementOfVersion() [TestCase("Merge branch 'release-0.1.5'\n\nRelates to: TicketId", true, "0.1.5")] [TestCase("Finish Release-0.12.0", true, "0.12.0")] //Support Syntevo SmartGit/Hg's Gitflow merge commit messages for finishing a 'Release' branch [TestCase("Merge branch 'Release-v0.2.0'", true, "0.2.0")] - [TestCase("Merge branch 'Release-v2.2'", true, "2.2.0")] [TestCase("Merge remote-tracking branch 'origin/release/0.8.0' into develop/" + MainBranch, true, "0.8.0")] [TestCase("Merge remote-tracking branch 'refs/remotes/origin/release/2.0.0'", true, "2.0.0")] + [TestCase("Merge branch 'Releases/0.2.0'", false, "0.2.0")] // Support Squash Commits public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCommit, string expectedVersion) { var parents = GetParents(isMergeCommit); @@ -78,14 +73,7 @@ public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCom [TestCase("Merge branch '4.0.3'", true)] [TestCase("Merge branch 's'", true)] [TestCase("Merge tag '10.10.50'", true)] - [TestCase("Merge branch 'hotfix-4.6.6' into support-4.6", true)] - [TestCase("Merge branch 'hotfix-10.10.50'", true)] - [TestCase("Merge branch 'Hotfix-10.10.50'", true)] - [TestCase("Merge branch 'Hotfix/10.10.50'", true)] - [TestCase("Merge branch 'hotfix-0.1.5'", true)] - [TestCase("Merge branch 'hotfix-4.2.2' into support-4.2", true)] [TestCase("Merge branch 'somebranch' into release-3.0.0", true)] - [TestCase("Merge branch 'hotfix-0.1.5'\n\nRelates to: TicketId", true)] [TestCase("Merge branch 'alpha-0.1.5'", true)] [TestCase("Merge pull request #95 from Particular/issue-94", false)] [TestCase("Merge pull request #95 in Particular/issue-94", true)] @@ -96,20 +84,25 @@ public void TakesVersionFromMergeOfReleaseBranch(string message, bool isMergeCom [TestCase("Finish 0.14.1", true)] // Don't support Syntevo SmartGit/Hg's Gitflow merge commit messages for finishing a 'Hotfix' branch public void ShouldNotTakeVersionFromMergeOfNonReleaseBranch(string message, bool isMergeCommit) { + var configurationBuilder = GitFlowConfigurationBuilder.New; + configurationBuilder.WithBranch("hotfix", builder => builder.WithIsReleaseBranch(false)); + ConfigurationHelper configurationHelper = new(configurationBuilder.Build()); + var configurationDictionary = configurationHelper.Dictionary; + var parents = GetParents(isMergeCommit); - AssertMergeMessage(message, null, parents); - AssertMergeMessage(message + " ", null, parents); - AssertMergeMessage(message + "\r ", null, parents); - AssertMergeMessage(message + "\r", null, parents); - AssertMergeMessage(message + "\r\n", null, parents); - AssertMergeMessage(message + "\r\n ", null, parents); - AssertMergeMessage(message + "\n", null, parents); - AssertMergeMessage(message + "\n ", null, parents); + AssertMergeMessage(message, null, parents, configurationDictionary); + AssertMergeMessage(message + " ", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r ", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r\n", null, parents, configurationDictionary); + AssertMergeMessage(message + "\r\n ", null, parents, configurationDictionary); + AssertMergeMessage(message + "\n", null, parents, configurationDictionary); + AssertMergeMessage(message + "\n ", null, parents, configurationDictionary); } - [TestCase("Merge pull request #165 from Particular/release-1.0.0", true)] - [TestCase("Merge pull request #165 in Particular/release-1.0.0", true)] - [TestCase("Merge pull request #500 in FOO/bar from Particular/release-1.0.0 to develop)", true)] + [TestCase("Merge pull request #165 from organization/Particular/release-1.0.0", true)] + [TestCase("Merge pull request #165 in organization/Particular/release-1.0.0", true)] + [TestCase("Merge pull request #500 in FOO/bar from organization/Particular/release-1.0.0 to develop)", true)] public void ShouldNotTakeVersionFromMergeOfReleaseBranchWithRemoteOtherThanOrigin(string message, bool isMergeCommit) { var parents = GetParents(isMergeCommit); @@ -124,11 +117,9 @@ public void ShouldNotTakeVersionFromMergeOfReleaseBranchWithRemoteOtherThanOrigi } [TestCase(@"Merge pull request #1 in FOO/bar from feature/ISSUE-1 to develop - * commit '38560a7eed06e8d3f3f1aaf091befcdf8bf50fea': Updated jQuery to v2.1.3")] [TestCase(@"Merge pull request #45 in BRIKKS/brikks from feature/NOX-68 to develop - * commit '38560a7eed06e8d3f3f1aaf091befcdf8bf50fea': Another commit message Commit message including a IP-number https://10.50.1.1 @@ -148,16 +139,20 @@ public void ShouldNotTakeVersionFromUnrelatedMerge(string commitMessage) [TestCase("Merge branch 'support/0.2.0'", "support", "0.2.0")] [TestCase("Merge branch 'support/0.2.0'", null, null)] [TestCase("Merge branch 'release/2.0.0'", null, "2.0.0")] - public void TakesVersionFromMergeOfConfiguredReleaseBranch(string message, string? releaseBranch, string expectedVersion) + public void TakesVersionFromMergeOfConfiguredReleaseBranch(string message, string? releaseBranch, string? expectedVersion) { - var config = new Config(); - if (releaseBranch != null) config.Branches[releaseBranch] = new BranchConfig { IsReleaseBranch = true }; + var configurationBuilder = GitFlowConfigurationBuilder.New; + if (releaseBranch != null) + { + configurationBuilder.WithBranch(releaseBranch, builder => builder.WithIsReleaseBranch(true)); + } + ConfigurationHelper configurationHelper = new(configurationBuilder.Build()); var parents = GetParents(true); - AssertMergeMessage(message, expectedVersion, parents, config); + AssertMergeMessage(message, expectedVersion, parents, configurationHelper.Dictionary); } - private static void AssertMergeMessage(string message, string? expectedVersion, IEnumerable parents, Config? config = null) + private static void AssertMergeMessage(string message, string? expectedVersion, IEnumerable parents, IReadOnlyDictionary? configuration = null) { var commit = GitToolsTestingExtensions.CreateMockCommit(); commit.Message.Returns(message); @@ -169,16 +164,16 @@ private static void AssertMergeMessage(string message, string? expectedVersion, mockRepository.Head.Returns(mockBranch); mockRepository.Commits.Returns(mockBranch.Commits); - var contextBuilder = new GitVersionContextBuilder() - .WithConfig(config ?? new Config()) + using var contextBuilder = new GitVersionContextBuilder() + .WithOverrideConfiguration(configuration) .WithRepository(mockRepository); contextBuilder.Build(); contextBuilder.ServicesProvider.ShouldNotBeNull(); var strategy = contextBuilder.ServicesProvider.GetServiceForType(); var context = contextBuilder.ServicesProvider.GetRequiredService>().Value; - var branchConfiguration = context.FullConfiguration.GetBranchConfiguration(mockBranch); - var effectiveConfiguration = new EffectiveConfiguration(context.FullConfiguration, branchConfiguration); - var baseVersion = strategy.GetBaseVersions(new(mockBranch, effectiveConfiguration)).SingleOrDefault(); + + strategy.ShouldNotBeNull(); + var baseVersion = strategy.GetBaseVersions(context.Configuration.GetEffectiveBranchConfiguration(mockBranch)).SingleOrDefault(); if (expectedVersion == null) { @@ -193,8 +188,8 @@ private static void AssertMergeMessage(string message, string? expectedVersion, private static List GetParents(bool isMergeCommit) => isMergeCommit - ? new List { new MockCommit(), new MockCommit(), } - : new List { new MockCommit(), }; + ? [new MockCommit(), new MockCommit()] + : [new MockCommit()]; private class MockCommit : ICommit { @@ -204,7 +199,7 @@ private class MockCommit : ICommit public int CompareTo(IGitObject? other) => throw new NotImplementedException(); public IObjectId Id => throw new NotImplementedException(); public string Sha => throw new NotImplementedException(); - public IEnumerable Parents => throw new NotImplementedException(); + public IReadOnlyList Parents => throw new NotImplementedException(); public DateTimeOffset When => throw new NotImplementedException(); public string Message => throw new NotImplementedException(); } diff --git a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/VersionInBranchNameBaseVersionStrategyTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/VersionInBranchNameBaseVersionStrategyTests.cs index 3d46d8d190..86aba6e7d3 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/Strategies/VersionInBranchNameBaseVersionStrategyTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/Strategies/VersionInBranchNameBaseVersionStrategyTests.cs @@ -1,12 +1,8 @@ -using GitTools.Testing; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; using GitVersion.VersionCalculation; -using LibGit2Sharp; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests.VersionCalculation.Strategies; @@ -18,88 +14,114 @@ public class VersionInBranchNameBaseVersionStrategyTests : TestBase public void CanTakeVersionFromNameOfReleaseBranch(string branchName, string expectedBaseVersion) { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.CreateBranch(branchName); - var gitRepository = fixture.Repository.ToGitRepository(); - var strategy = GetVersionStrategy(fixture.RepositoryPath, gitRepository, branchName); - var configuration = TestConfigurationBuilder.New.Build(); - var branchConfiguration = configuration.GetBranchConfiguration(branchName); - var effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration); - var baseVersion = strategy.GetBaseVersions(new(gitRepository.FindBranch(branchName)!, effectiveConfiguration)).Single(); + fixture.MakeACommit(); + fixture.CreateBranch(branchName); + + var repository = fixture.Repository.ToGitRepository(); + + var strategy = GetVersionStrategy(repository); + var branch = repository.FindBranch(branchName); + + var configuration = GitFlowConfigurationBuilder.New.Build(); + var effectiveBranchConfiguration = configuration.GetEffectiveBranchConfiguration(branch); + + strategy.ShouldNotBeNull(); + var baseVersion = strategy.GetBaseVersions(effectiveBranchConfiguration).Single(); baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion); } - [TestCase("hotfix-2.0.0")] - [TestCase("hotfix/2.0.0")] + [TestCase("origin/hotfix-2.0.0")] + [TestCase("remotes/origin/hotfix-2.0.0")] + [TestCase("origin/hotfix/2.0.0")] + [TestCase("remotes/origin/hotfix/2.0.0")] [TestCase("custom/JIRA-123")] + [TestCase("remotes/custom/JIRA-123")] [TestCase("hotfix/downgrade-to-gitversion-3.6.5-to-fix-miscalculated-version")] + [TestCase("remotes/hotfix/downgrade-to-gitversion-3.6.5-to-fix-miscalculated-version")] public void ShouldNotTakeVersionFromNameOfNonReleaseBranch(string branchName) { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.CreateBranch(branchName); - var gitRepository = fixture.Repository.ToGitRepository(); - var strategy = GetVersionStrategy(fixture.RepositoryPath, gitRepository, branchName); - var configuration = TestConfigurationBuilder.New.Build(); - var branchConfiguration = configuration.GetBranchConfiguration(branchName); - var effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration); - var baseVersions = strategy.GetBaseVersions(new(gitRepository.FindBranch(branchName)!, effectiveConfiguration)); + fixture.MakeACommit(); + fixture.CreateBranch(branchName); + + var repository = fixture.Repository.ToGitRepository(); + + var strategy = GetVersionStrategy(repository); + var branch = repository.FindBranch(branchName); + + var configuration = GitFlowConfigurationBuilder.New.Build(); + var effectiveBranchConfiguration = configuration.GetEffectiveBranchConfiguration(branch); + + strategy.ShouldNotBeNull(); + var baseVersions = strategy.GetBaseVersions(effectiveBranchConfiguration); baseVersions.ShouldBeEmpty(); } - [TestCase("support/lts-2.0.0", "2.0.0")] + [TestCase("release-2.0.0", "2.0.0")] + [TestCase("release/3.0.0", "3.0.0")] + [TestCase("support/2.0.0-lts", "2.0.0")] [TestCase("support-3.0.0-lts", "3.0.0")] + [TestCase("hotfix/2.0.0", "2.0.0")] + [TestCase("hotfix-3.0.0", "3.0.0")] + [TestCase("hotfix/2.0.0-lts", "2.0.0")] + [TestCase("hotfix-3.0.0-lts", "3.0.0")] public void CanTakeVersionFromNameOfConfiguredReleaseBranch(string branchName, string expectedBaseVersion) { using var fixture = new EmptyRepositoryFixture(); - fixture.Repository.MakeACommit(); - fixture.Repository.CreateBranch(branchName); - var config = new ConfigurationBuilder() - .Add(new Config { Branches = { { "support", new BranchConfig { IsReleaseBranch = true } } } }) + fixture.MakeACommit(); + fixture.CreateBranch(branchName); + + var repository = fixture.Repository.ToGitRepository(); + + var configuration = GitFlowConfigurationBuilder.New + .WithBranch("support", builder => builder.WithIsReleaseBranch(true)) .Build(); + ConfigurationHelper configurationHelper = new(configuration); + + var strategy = GetVersionStrategy(repository, null, configurationHelper.Dictionary); + var branch = repository.FindBranch(branchName); - var gitRepository = fixture.Repository.ToGitRepository(); - var strategy = GetVersionStrategy(fixture.RepositoryPath, gitRepository, branchName, config); + var effectiveBranchConfiguration = configuration.GetEffectiveBranchConfiguration(branch); - var configuration = TestConfigurationBuilder.New.Build(); - var branchConfiguration = configuration.GetBranchConfiguration(branchName); - var effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration); - var baseVersion = strategy.GetBaseVersions(new(gitRepository.FindBranch(branchName)!, effectiveConfiguration)).Single(); + strategy.ShouldNotBeNull(); + var baseVersion = strategy.GetBaseVersions(effectiveBranchConfiguration).Single(); baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion); } - [TestCase("release-2.0.0", "2.0.0")] - [TestCase("release/3.0.0", "3.0.0")] - public void CanTakeVersionFromNameOfRemoteReleaseBranch(string branchName, string expectedBaseVersion) + [TestCase("origin", "release-2.0.0", "2.0.0")] + [TestCase("origin", "release/3.0.0", "3.0.0")] + public void CanTakeVersionFromNameOfRemoteReleaseBranch(string origin, string branchName, string expectedBaseVersion) { using var fixture = new RemoteRepositoryFixture(); - var branch = fixture.Repository.CreateBranch(branchName); - Commands.Checkout(fixture.Repository, branch); - fixture.MakeACommit(); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); - fixture.LocalRepositoryFixture.Checkout($"origin/{branchName}"); + fixture.CreateBranch(branchName); + if (origin != "origin") fixture.LocalRepositoryFixture.Repository.Network.Remotes.Rename("origin", origin); + fixture.LocalRepositoryFixture.Fetch(origin); + + var localRepository = fixture.LocalRepositoryFixture.Repository.ToGitRepository(); + + var strategy = GetVersionStrategy(localRepository); + var branch = localRepository.FindBranch(branchName); - var gitRepository = fixture.Repository.ToGitRepository(); - var strategy = GetVersionStrategy(fixture.RepositoryPath, gitRepository, branchName); + var configuration = GitFlowConfigurationBuilder.New.Build(); + var effectiveBranchConfiguration = configuration.GetEffectiveBranchConfiguration(branch); - var configuration = TestConfigurationBuilder.New.Build(); - var branchConfiguration = configuration.GetBranchConfiguration(branchName); - var effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration); - var baseVersion = strategy.GetBaseVersions(new(gitRepository.FindBranch(branchName)!, effectiveConfiguration)).Single(); + strategy.ShouldNotBeNull(); + var baseVersion = strategy.GetBaseVersions(effectiveBranchConfiguration).Single(); baseVersion.SemanticVersion.ToString().ShouldBe(expectedBaseVersion); } - private static IVersionStrategy GetVersionStrategy(string workingDirectory, IGitRepository repository, string branch, Config? config = null) + private static IVersionStrategy GetVersionStrategy(IGitRepository repository, + string? targetBranch = null, IReadOnlyDictionary? overrideConfiguration = null) { - var sp = BuildServiceProvider(workingDirectory, repository, branch, config); - return sp.GetServiceForType(); + var serviceProvider = BuildServiceProvider(repository, targetBranch, overrideConfiguration); + return serviceProvider.GetServiceForType(); } } diff --git a/src/GitVersion.Core.Tests/VersionCalculation/TestBaseVersionCalculator.cs b/src/GitVersion.Core.Tests/VersionCalculation/TestBaseVersionCalculator.cs deleted file mode 100644 index 467f899b8d..0000000000 --- a/src/GitVersion.Core.Tests/VersionCalculation/TestBaseVersionCalculator.cs +++ /dev/null @@ -1,22 +0,0 @@ -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; - -namespace GitVersion.Core.Tests.VersionCalculation; - -public class TestBaseVersionCalculator : IBaseVersionCalculator -{ - private readonly SemanticVersion semanticVersion; - private readonly bool shouldIncrement; - private readonly ICommit source; - private readonly EffectiveBranchConfiguration configuration; - - public TestBaseVersionCalculator(bool shouldIncrement, SemanticVersion semanticVersion, ICommit source, EffectiveBranchConfiguration configuration) - { - this.semanticVersion = semanticVersion; - this.source = source; - this.shouldIncrement = shouldIncrement; - this.configuration = configuration; - } - - public (BaseVersion, EffectiveBranchConfiguration) GetBaseVersion() => new(new("Test source", this.shouldIncrement, this.semanticVersion, this.source, null), this.configuration); -} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/TestMainlineVersionCalculator.cs b/src/GitVersion.Core.Tests/VersionCalculation/TestMainlineVersionCalculator.cs deleted file mode 100644 index aa69a47ab4..0000000000 --- a/src/GitVersion.Core.Tests/VersionCalculation/TestMainlineVersionCalculator.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GitVersion.VersionCalculation; - -namespace GitVersion.Core.Tests.VersionCalculation; - -public class TestMainlineVersionCalculator : IMainlineVersionCalculator -{ - private readonly SemanticVersionBuildMetaData metaData; - - public TestMainlineVersionCalculator(SemanticVersionBuildMetaData metaData) => this.metaData = metaData; - - public SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion) => throw new NotImplementedException(); - - public SemanticVersionBuildMetaData CreateVersionBuildMetaData(ICommit? baseVersionSource) => this.metaData; -} diff --git a/src/GitVersion.Core.Tests/VersionCalculation/VariableProviderTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/VariableProviderTests.cs index 60b393e942..fecaa15065 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/VariableProviderTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/VariableProviderTests.cs @@ -1,9 +1,9 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; +using GitVersion.Git; using GitVersion.Logging; using GitVersion.VersionCalculation; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -18,7 +18,7 @@ public void Setup() { ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); - this.logMessages = new List(); + this.logMessages = []; var sp = ConfigureServices(services => { @@ -30,164 +30,115 @@ public void Setup() } [Test] - public void ShouldLogWarningWhenUsingDefaultInformationalVersionInCustomFormat() - { - var semVer = new SemanticVersion - { - Major = 1, - Minor = 2, - Patch = 3 - }; - -#pragma warning disable CS0618 // Type or member is obsolete - const string propertyName = nameof(SemanticVersionFormatValues.DefaultInformationalVersion); -#pragma warning restore CS0618 // Type or member is obsolete - var config = new TestEffectiveConfiguration(assemblyInformationalFormat: $"{{{propertyName}}}"); - this.variableProvider.GetVariablesFor(semVer, config, false); - this.logMessages.ShouldContain(message => message.Trim().StartsWith("WARN") && message.Contains(propertyName), 1, $"Expected a warning to be logged when using the variable {propertyName} in a configuration format template"); - } - - [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeliveryModeForPreRelease() { - var semVer = new SemanticVersion - { - Major = 1, - Minor = 2, - Patch = 3, - PreReleaseTag = "unstable.4", - BuildMetaData = "5.Branch.develop" - }; - - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - - - var config = new TestEffectiveConfiguration(); - - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); - - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); - } - - [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] - public void ProvidesVariablesInContinuousDeliveryModeForPreReleaseWithPadding() - { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, PreReleaseTag = "unstable.4", - BuildMetaData = "5.Branch.develop" + BuildMetaData = new("5.Branch.develop") + { + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - - - var config = new TestEffectiveConfiguration(buildMetaDataPadding: 2, legacySemVerPadding: 5); - - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); + var configuration = GitFlowConfigurationBuilder.New.Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("unstable")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeploymentModeForPreRelease() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - PreReleaseTag = "unstable.4", - BuildMetaData = "5.Branch.develop" + PreReleaseTag = new("unstable", 8, true), + BuildMetaData = new("Branch.develop") + { + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitsSinceVersionSource = 5, + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - - var config = new TestEffectiveConfiguration(versioningMode: VersioningMode.ContinuousDeployment); - - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); + var configuration = GitFlowConfigurationBuilder.New.Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("unstable")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeliveryModeForStable() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.develop" + BuildMetaData = new("5.Branch.develop") + { + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); + var configuration = GitFlowConfigurationBuilder.New.WithTagPreReleaseWeight(0).Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("develop")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - var config = new TestEffectiveConfiguration(); - - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); - - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeploymentModeForStable() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.develop" + PreReleaseTag = new("ci", 5, true), + BuildMetaData = new("Branch.develop") + { + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitsSinceVersionSource = 5, + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - - var config = new TestEffectiveConfiguration(versioningMode: VersioningMode.ContinuousDeployment); + var configuration = GitFlowConfigurationBuilder.New.Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("develop")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); - - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommitIsTagged() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = new SemanticVersionBuildMetaData + BuildMetaData = new() { VersionSourceSha = "versionSourceSha", CommitsSinceTag = 5, @@ -198,109 +149,139 @@ public void ProvidesVariablesInContinuousDeploymentModeForStableWhenCurrentCommi } }; - var config = new TestEffectiveConfiguration(versioningMode: VersioningMode.ContinuousDeployment); - - var vars = this.variableProvider.GetVariablesFor(semVer, config, true); + var configuration = GitFlowConfigurationBuilder.New.WithTagPreReleaseWeight(0).Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("develop")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } [Test] public void ProvidesVariablesInContinuousDeploymentModeWithTagNamePattern() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - PreReleaseTag = "PullRequest", - BuildMetaData = "5.Branch.develop" + PreReleaseTag = new("PullRequest2", 5, true), + BuildMetaData = new("Branch.develop") + { + Branch = "pull/2/merge", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.Branch = "pull/2/merge"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - - var config = new TestEffectiveConfiguration(versioningMode: VersioningMode.ContinuousDeployment, tagNumberPattern: @"[/-](?\d+)[-/]"); - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); + var configuration = GitFlowConfigurationBuilder.New.Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("pull-request")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - vars.FullSemVer.ShouldBe("1.2.3-PullRequest0002.5"); + variables.FullSemVer.ShouldBe("1.2.3-PullRequest2.5"); } [Test] - public void ProvidesVariablesInContinuousDeploymentModeWithTagSetToUseBranchName() + public void ProvidesVariablesInContinuousDeploymentModeWithTagSetToBranchName() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.develop" + PreReleaseTag = new("feature", 5, true), + BuildMetaData = new("Branch.develop") + { + Branch = "feature", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.Branch = "feature"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); + var configuration = GitFlowConfigurationBuilder.New.Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("develop")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - var config = new TestEffectiveConfiguration(versioningMode: VersioningMode.ContinuousDeployment, tag: "useBranchName"); - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); - - vars.FullSemVer.ShouldBe("1.2.3-feature.5"); + variables.FullSemVer.ShouldBe("1.2.3-feature.5"); } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeliveryModeForFeatureBranch() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.feature/123" + BuildMetaData = new("5.Branch.feature/123") + { + Branch = "feature/123", + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.Branch = "feature/123"; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); - - - var config = new TestEffectiveConfiguration(); - - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); + var configuration = GitFlowConfigurationBuilder.New.WithTagPreReleaseWeight(0).Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("develop")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ProvidesVariablesInContinuousDeliveryModeForFeatureBranchWithCustomAssemblyInfoFormat() { - var semVer = new SemanticVersion + var semanticVersion = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.feature/123" + BuildMetaData = new("5.Branch.feature/123") + { + Branch = "feature/123", + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } }; - semVer.BuildMetaData.Branch = "feature/123"; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z"); + var configuration = GitFlowConfigurationBuilder.New.WithTagPreReleaseWeight(0) + .WithAssemblyInformationalFormat("{Major}.{Minor}.{Patch}+{CommitsSinceVersionSource}.Branch.{BranchName}.Sha.{ShortSha}") + .Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("develop")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); + variables.ToJson().ShouldMatchApproved(c => c.SubFolder("Approved")); + } - var config = new TestEffectiveConfiguration(assemblyInformationalFormat: "{Major}.{Minor}.{Patch}+{CommitsSinceVersionSource}.Branch.{BranchName}.Sha.{ShortSha}"); + [Test] + public void ProvidesVariablesInContinuousDeploymentModeForMainBranchWithEmptyLabel() + { + var semanticVersion = new SemanticVersion + { + Major = 1, + Minor = 2, + Patch = 3, + PreReleaseTag = new(string.Empty, 9, true), + BuildMetaData = new("Branch.main") + { + Branch = "main", + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitsSinceVersionSource = 5, + CommitDate = DateTimeOffset.Parse("2014-03-06 23:59:59Z") + } + }; - var vars = this.variableProvider.GetVariablesFor(semVer, config, false); + var configuration = GitFlowConfigurationBuilder.New.Build(); + int preReleaseWeight = configuration.GetEffectiveConfiguration(ReferenceName.FromBranchName("main")).PreReleaseWeight; + var variables = this.variableProvider.GetVariablesFor(semanticVersion, configuration, preReleaseWeight); - vars.ToString().ShouldMatchApproved(c => c.SubFolder("Approved")); + variables.ToJson().ShouldMatchApproved(x => x.SubFolder("Approved")); } } diff --git a/src/GitVersion.Core.Tests/VersionCalculation/VersionSourceTests.cs b/src/GitVersion.Core.Tests/VersionCalculation/VersionSourceTests.cs index 0434ab6fda..f4618e6d40 100644 --- a/src/GitVersion.Core.Tests/VersionCalculation/VersionSourceTests.cs +++ b/src/GitVersion.Core.Tests/VersionCalculation/VersionSourceTests.cs @@ -1,10 +1,7 @@ -using GitTools.Testing; using GitVersion.Core.Tests.Helpers; +using GitVersion.Git; using GitVersion.VersionCalculation; -using LibGit2Sharp; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -15,61 +12,58 @@ public class VersionSourceTests : TestBase public void VersionSourceSha() { using var fixture = new EmptyRepositoryFixture(); - var initialCommit = fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - _ = fixture.Repository.MakeACommit(); - var featureBranch = fixture.Repository.CreateBranch("feature/foo"); - Commands.Checkout(fixture.Repository, featureBranch); - _ = fixture.Repository.MakeACommit(); - var nextVersionCalculator = GetNextVersionCalculator(fixture); + fixture.MakeACommit(); + fixture.BranchTo("develop"); + fixture.MakeACommit(); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit(); - var nextVersion = nextVersionCalculator.FindVersion(); + var nextVersionCalculator = GetNextVersionCalculator(fixture.Repository.ToGitRepository()); - nextVersion.IncrementedVersion.BuildMetaData.ShouldNotBeNull(); - nextVersion.IncrementedVersion.BuildMetaData.VersionSourceSha.ShouldBe(initialCommit.Sha); - nextVersion.IncrementedVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(2); + var semanticVersion = nextVersionCalculator.FindVersion(); + + semanticVersion.BuildMetaData.VersionSourceSha.ShouldBeNull(); + semanticVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(3); } [Test] public void VersionSourceShaOneCommit() { using var fixture = new EmptyRepositoryFixture(); - var initialCommit = fixture.Repository.MakeACommit(); - var nextVersionCalculator = GetNextVersionCalculator(fixture); + fixture.MakeACommit(); + + var nextVersionCalculator = GetNextVersionCalculator(fixture.Repository.ToGitRepository()); - var nextVersion = nextVersionCalculator.FindVersion(); + var semanticVersion = nextVersionCalculator.FindVersion(); - nextVersion.IncrementedVersion.BuildMetaData.ShouldNotBeNull(); - nextVersion.IncrementedVersion.BuildMetaData.VersionSourceSha.ShouldBe(initialCommit.Sha); - nextVersion.IncrementedVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(0); + semanticVersion.BuildMetaData.VersionSourceSha.ShouldBeNull(); + semanticVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(1); } [Test] public void VersionSourceShaUsingTag() { using var fixture = new EmptyRepositoryFixture(); - _ = fixture.Repository.MakeACommit(); - Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); - var secondCommit = fixture.Repository.MakeACommit(); - _ = fixture.Repository.Tags.Add("1.0", secondCommit); - var featureBranch = fixture.Repository.CreateBranch("feature/foo"); - Commands.Checkout(fixture.Repository, featureBranch); - _ = fixture.Repository.MakeACommit(); - var nextVersionCalculator = GetNextVersionCalculator(fixture); + fixture.MakeACommit(); + fixture.BranchTo("develop"); + var secondCommitSha = fixture.MakeATaggedCommit("1.0.0"); + fixture.BranchTo("feature/foo"); + fixture.MakeACommit(); + + var nextVersionCalculator = GetNextVersionCalculator(fixture.Repository.ToGitRepository()); - var nextVersion = nextVersionCalculator.FindVersion(); + var semanticVersion = nextVersionCalculator.FindVersion(); - nextVersion.IncrementedVersion.BuildMetaData.ShouldNotBeNull(); - nextVersion.IncrementedVersion.BuildMetaData.VersionSourceSha.ShouldBe(secondCommit.Sha); - nextVersion.IncrementedVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(1); + semanticVersion.BuildMetaData.VersionSourceSha.ShouldBe(secondCommitSha); + semanticVersion.BuildMetaData.CommitsSinceVersionSource.ShouldBe(1); } - private static INextVersionCalculator GetNextVersionCalculator(RepositoryFixtureBase fixture) + private static INextVersionCalculator GetNextVersionCalculator(IGitRepository repository) { - var sp = BuildServiceProvider(fixture.RepositoryPath, fixture.Repository.ToGitRepository(), fixture.Repository.Head.CanonicalName); - return sp.GetRequiredService(); + var serviceProvider = BuildServiceProvider(repository); + return serviceProvider.GetRequiredService(); } } diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt deleted file mode 100644 index 81e95850b7..0000000000 --- a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt +++ /dev/null @@ -1,64 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// GitVersion -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -#if NET20 || NET35 || NETCOREAPP1_0 || NETCOREAPP1_1 || NETSTANDARD1_0 || NETSTANDARD1_1 || NETSTANDARD1_2 || NETSTANDARD1_3 || NETSTANDARD1_4 || NETSTANDARD1_5 || NETSTANDARD1_6 -namespace System.Diagnostics.CodeAnalysis -{ - [global::System.AttributeUsage( - global::System.AttributeTargets.Assembly | - global::System.AttributeTargets.Class | - global::System.AttributeTargets.Struct | - global::System.AttributeTargets.Constructor | - global::System.AttributeTargets.Method | - global::System.AttributeTargets.Property | - global::System.AttributeTargets.Event, - Inherited = false, AllowMultiple = false)] - internal sealed class ExcludeFromCodeCoverageAttribute : global::System.Attribute { } -} -#endif - -[global::System.Runtime.CompilerServices.CompilerGenerated] -[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] -static class GitVersionInformation -{ - public static string Major = "1"; - public static string Minor = "2"; - public static string Patch = "3"; - public static string PreReleaseTag = "unstable.4"; - public static string PreReleaseTagWithDash = "-unstable.4"; - public static string PreReleaseLabel = "unstable"; - public static string PreReleaseLabelWithDash = "-unstable"; - public static string PreReleaseNumber = "4"; - public static string WeightedPreReleaseNumber = "4"; - public static string BuildMetaData = "5"; - public static string BuildMetaDataPadded = "0005"; - public static string FullBuildMetaData = "5.Branch.feature1.Sha.commitSha"; - public static string MajorMinorPatch = "1.2.3"; - public static string SemVer = "1.2.3-unstable.4"; - public static string LegacySemVer = "1.2.3-unstable4"; - public static string LegacySemVerPadded = "1.2.3-unstable0004"; - public static string AssemblySemVer = "1.2.3.0"; - public static string AssemblySemFileVer = "1.2.3.0"; - public static string FullSemVer = "1.2.3-unstable.4+5"; - public static string InformationalVersion = "1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha"; - public static string BranchName = "feature1"; - public static string EscapedBranchName = "feature1"; - public static string Sha = "commitSha"; - public static string ShortSha = "commitShortSha"; - public static string NuGetVersionV2 = "1.2.3-unstable0004"; - public static string NuGetVersion = "1.2.3-unstable0004"; - public static string NuGetPreReleaseTagV2 = "unstable0004"; - public static string NuGetPreReleaseTag = "unstable0004"; - public static string VersionSourceSha = "versionSourceSha"; - public static string CommitsSinceVersionSource = "5"; - public static string CommitsSinceVersionSourcePadded = "0005"; - public static string UncommittedChanges = "0"; - public static string CommitDate = "2014-03-06"; -} diff --git a/src/GitVersion.Core/BuildAgents/BuildAgentBase.cs b/src/GitVersion.Core/Agents/BuildAgentBase.cs similarity index 68% rename from src/GitVersion.Core/BuildAgents/BuildAgentBase.cs rename to src/GitVersion.Core/Agents/BuildAgentBase.cs index f47c63ce36..29840605bb 100644 --- a/src/GitVersion.Core/BuildAgents/BuildAgentBase.cs +++ b/src/GitVersion.Core/Agents/BuildAgentBase.cs @@ -2,23 +2,18 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public abstract class BuildAgentBase : ICurrentBuildAgent +internal abstract class BuildAgentBase(IEnvironment environment, ILog log) : ICurrentBuildAgent { - protected readonly ILog Log; - protected IEnvironment Environment { get; } - - protected BuildAgentBase(IEnvironment environment, ILog log) - { - this.Log = log; - Environment = environment; - } + protected readonly ILog Log = log.NotNull(); + protected IEnvironment Environment { get; } = environment.NotNull(); protected abstract string EnvironmentVariable { get; } + public virtual bool IsDefault => false; - public abstract string? GenerateSetVersionMessage(VersionVariables variables); - public abstract string[] GenerateSetParameterMessage(string name, string value); + public abstract string? GenerateSetVersionMessage(GitVersionVariables variables); + public abstract string[] GenerateSetParameterMessage(string name, string? value); public virtual bool CanApplyToCurrentContext() => !Environment.GetEnvironmentVariable(EnvironmentVariable).IsNullOrEmpty(); @@ -27,7 +22,7 @@ protected BuildAgentBase(IEnvironment environment, ILog log) public virtual bool PreventFetch() => true; public virtual bool ShouldCleanUpRemotes() => false; - public virtual void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true) + public virtual void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true) { if (updateBuildNumber) { @@ -41,7 +36,7 @@ public virtual void WriteIntegration(Action writer, VersionVariables va } } - protected IEnumerable GenerateBuildLogOutput(VersionVariables variables) + protected IEnumerable GenerateBuildLogOutput(GitVersionVariables variables) { var output = new List(); diff --git a/src/GitVersion.Core/BuildAgents/BuildAgentResolver.cs b/src/GitVersion.Core/Agents/BuildAgentResolver.cs similarity index 53% rename from src/GitVersion.Core/BuildAgents/BuildAgentResolver.cs rename to src/GitVersion.Core/Agents/BuildAgentResolver.cs index 9b90e7076c..25cbbedcac 100644 --- a/src/GitVersion.Core/BuildAgents/BuildAgentResolver.cs +++ b/src/GitVersion.Core/Agents/BuildAgentResolver.cs @@ -1,27 +1,20 @@ using GitVersion.Extensions; using GitVersion.Logging; -namespace GitVersion.BuildAgents; +namespace GitVersion.Agents; -public class BuildAgentResolver : IBuildAgentResolver +internal class BuildAgentResolver(IEnumerable buildAgents, ILog log) : IBuildAgentResolver { - private readonly IEnumerable buildAgents; - private readonly ILog log; - public BuildAgentResolver(IEnumerable buildAgents, ILog log) - { - this.log = log.NotNull(); - this.buildAgents = buildAgents; - } + private readonly ILog log = log.NotNull(); public ICurrentBuildAgent Resolve() => new Lazy(ResolveInternal).Value; private ICurrentBuildAgent ResolveInternal() { - ICurrentBuildAgent instance = (ICurrentBuildAgent)this.buildAgents.Single(x => x is LocalBuild); + ICurrentBuildAgent instance = (ICurrentBuildAgent)buildAgents.Single(x => x.IsDefault); - foreach (var buildAgent in this.buildAgents.Where(x => x is not LocalBuild)) + foreach (var buildAgent in buildAgents.Where(x => !x.IsDefault)) { - var agentName = buildAgent.GetType().Name; try { if (!buildAgent.CanApplyToCurrentContext()) continue; @@ -29,6 +22,7 @@ private ICurrentBuildAgent ResolveInternal() } catch (Exception ex) { + var agentName = buildAgent.GetType().Name; this.log.Warning($"Failed to check build agent '{agentName}': {ex.Message}"); } } diff --git a/src/GitVersion.Core/Agents/IBuildAgent.cs b/src/GitVersion.Core/Agents/IBuildAgent.cs new file mode 100644 index 0000000000..b6f7b36725 --- /dev/null +++ b/src/GitVersion.Core/Agents/IBuildAgent.cs @@ -0,0 +1,17 @@ +using GitVersion.OutputVariables; + +namespace GitVersion.Agents; + +public interface IBuildAgent +{ + bool IsDefault { get; } + + bool CanApplyToCurrentContext(); + string? GetCurrentBranch(bool usingDynamicRepos); + bool PreventFetch(); + bool ShouldCleanUpRemotes(); + + void WriteIntegration(Action writer, GitVersionVariables variables, bool updateBuildNumber = true); +} + +public interface ICurrentBuildAgent : IBuildAgent; diff --git a/src/GitVersion.Core/Agents/IBuildAgentResolver.cs b/src/GitVersion.Core/Agents/IBuildAgentResolver.cs new file mode 100644 index 0000000000..650b72033f --- /dev/null +++ b/src/GitVersion.Core/Agents/IBuildAgentResolver.cs @@ -0,0 +1,6 @@ +namespace GitVersion.Agents; + +internal interface IBuildAgentResolver +{ + ICurrentBuildAgent Resolve(); +} diff --git a/src/GitVersion.Core/Agents/LocalBuild.cs b/src/GitVersion.Core/Agents/LocalBuild.cs new file mode 100644 index 0000000000..11a636b352 --- /dev/null +++ b/src/GitVersion.Core/Agents/LocalBuild.cs @@ -0,0 +1,14 @@ +using GitVersion.Logging; +using GitVersion.OutputVariables; + +namespace GitVersion.Agents; + +internal class LocalBuild(IEnvironment environment, ILog log) : BuildAgentBase(environment, log) +{ + public override bool IsDefault => true; + + protected override string EnvironmentVariable => string.Empty; + public override bool CanApplyToCurrentContext() => true; + public override string? GenerateSetVersionMessage(GitVersionVariables variables) => null; + public override string[] GenerateSetParameterMessage(string name, string? value) => []; +} diff --git a/src/GitVersion.Core/BuildAgents/Abstractions/IBuildAgent.cs b/src/GitVersion.Core/BuildAgents/Abstractions/IBuildAgent.cs deleted file mode 100644 index 6a81aaafe2..0000000000 --- a/src/GitVersion.Core/BuildAgents/Abstractions/IBuildAgent.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GitVersion.OutputVariables; - -namespace GitVersion.BuildAgents; - -public interface IBuildAgent -{ - bool CanApplyToCurrentContext(); - void WriteIntegration(Action writer, VersionVariables variables, bool updateBuildNumber = true); - string? GetCurrentBranch(bool usingDynamicRepos); - bool PreventFetch(); - bool ShouldCleanUpRemotes(); -} - -public interface ICurrentBuildAgent : IBuildAgent { } diff --git a/src/GitVersion.Core/BuildAgents/Abstractions/IBuildAgentResolver.cs b/src/GitVersion.Core/BuildAgents/Abstractions/IBuildAgentResolver.cs deleted file mode 100644 index 8338985d03..0000000000 --- a/src/GitVersion.Core/BuildAgents/Abstractions/IBuildAgentResolver.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace GitVersion.BuildAgents; - -public interface IBuildAgentResolver -{ - ICurrentBuildAgent Resolve(); -} diff --git a/src/GitVersion.Core/BuildAgents/BuildServerModule.cs b/src/GitVersion.Core/BuildAgents/BuildServerModule.cs deleted file mode 100644 index 5cd41175d0..0000000000 --- a/src/GitVersion.Core/BuildAgents/BuildServerModule.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion.BuildAgents; - -public class BuildServerModule : GitVersionModule -{ - public override void RegisterTypes(IServiceCollection services) - { - var buildAgents = FindAllDerivedTypes(Assembly.GetAssembly(GetType())); - - foreach (var buildAgent in buildAgents) - { - services.AddSingleton(typeof(IBuildAgent), buildAgent); - } - - services.AddSingleton(); - services.AddSingleton(sp => sp.GetRequiredService().Resolve()); - } -} diff --git a/src/GitVersion.Core/BuildAgents/LocalBuild.cs b/src/GitVersion.Core/BuildAgents/LocalBuild.cs deleted file mode 100644 index 65f19663be..0000000000 --- a/src/GitVersion.Core/BuildAgents/LocalBuild.cs +++ /dev/null @@ -1,15 +0,0 @@ -using GitVersion.Logging; -using GitVersion.OutputVariables; - -namespace GitVersion.BuildAgents; - -public class LocalBuild : BuildAgentBase -{ - public LocalBuild(IEnvironment environment, ILog log) : base(environment, log) - { - } - protected override string EnvironmentVariable => string.Empty; - public override bool CanApplyToCurrentContext() => true; - public override string? GenerateSetVersionMessage(VersionVariables variables) => null; - public override string[] GenerateSetParameterMessage(string name, string value) => Array.Empty(); -} diff --git a/src/GitVersion.Core/Configuration/Abstractions/IBranchConfigurationCalculator.cs b/src/GitVersion.Core/Configuration/Abstractions/IBranchConfigurationCalculator.cs deleted file mode 100644 index ed49a4e085..0000000000 --- a/src/GitVersion.Core/Configuration/Abstractions/IBranchConfigurationCalculator.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration; - -public interface IBranchConfigurationCalculator -{ - /// - /// Gets the for the current commit. - /// - BranchConfig GetBranchConfiguration(IBranch targetBranch, ICommit? currentCommit, Config configuration, IList? excludedInheritBranches = null); -} diff --git a/src/GitVersion.Core/Configuration/Abstractions/IConfigFileLocator.cs b/src/GitVersion.Core/Configuration/Abstractions/IConfigFileLocator.cs deleted file mode 100644 index 3d3b90eda3..0000000000 --- a/src/GitVersion.Core/Configuration/Abstractions/IConfigFileLocator.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration; - -public interface IConfigFileLocator -{ - string FilePath { get; } - bool HasConfigFileAt(string workingDirectory); - string? GetConfigFilePath(string workingDirectory); - void Verify(GitVersionOptions gitVersionOptions, IGitRepositoryInfo repositoryInfo); - void Verify(string workingDirectory, string projectRootDirectory); - string? SelectConfigFilePath(GitVersionOptions gitVersionOptions, IGitRepositoryInfo repositoryInfo); - Config ReadConfig(string workingDirectory); -} diff --git a/src/GitVersion.Core/Configuration/Abstractions/IConfigProvider.cs b/src/GitVersion.Core/Configuration/Abstractions/IConfigProvider.cs deleted file mode 100644 index d7b26dfae5..0000000000 --- a/src/GitVersion.Core/Configuration/Abstractions/IConfigProvider.cs +++ /dev/null @@ -1,10 +0,0 @@ -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration; - -public interface IConfigProvider -{ - Config Provide(Config? overrideConfig = null); - Config Provide(string workingDirectory, Config? overrideConfig = null); - void Init(string workingDirectory); -} diff --git a/src/GitVersion.Core/Configuration/AssemblyFileVersioningScheme.cs b/src/GitVersion.Core/Configuration/AssemblyFileVersioningScheme.cs new file mode 100644 index 0000000000..1593116fba --- /dev/null +++ b/src/GitVersion.Core/Configuration/AssemblyFileVersioningScheme.cs @@ -0,0 +1,10 @@ +namespace GitVersion.Configuration; + +public enum AssemblyFileVersioningScheme +{ + MajorMinorPatchTag, + MajorMinorPatch, + MajorMinor, + Major, + None +} diff --git a/src/GitVersion.Core/Configuration/AssemblyVersioningScheme.cs b/src/GitVersion.Core/Configuration/AssemblyVersioningScheme.cs new file mode 100644 index 0000000000..596decd681 --- /dev/null +++ b/src/GitVersion.Core/Configuration/AssemblyVersioningScheme.cs @@ -0,0 +1,10 @@ +namespace GitVersion.Configuration; + +public enum AssemblyVersioningScheme +{ + MajorMinorPatchTag, + MajorMinorPatch, + MajorMinor, + Major, + None +} diff --git a/src/GitVersion.Core/Configuration/BranchConfigurationCalculator.cs b/src/GitVersion.Core/Configuration/BranchConfigurationCalculator.cs deleted file mode 100644 index dc33672dd5..0000000000 --- a/src/GitVersion.Core/Configuration/BranchConfigurationCalculator.cs +++ /dev/null @@ -1,275 +0,0 @@ -using System.Text.RegularExpressions; -using GitVersion.Common; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; -using GitVersion.Model.Exceptions; - -namespace GitVersion.Configuration; - -public class BranchConfigurationCalculator : IBranchConfigurationCalculator -{ - private const string FallbackConfigName = "Fallback"; - private const int MaxRecursions = 50; - - private readonly ILog log; - private readonly IRepositoryStore repositoryStore; - - public BranchConfigurationCalculator(ILog log, IRepositoryStore repositoryStore) - { - this.log = log.NotNull(); - this.repositoryStore = repositoryStore.NotNull(); - } - - /// - /// Gets the for the current commit. - /// - public BranchConfig GetBranchConfiguration(IBranch targetBranch, ICommit? currentCommit, Config configuration, IList? excludedInheritBranches = null) => - GetBranchConfigurationInternal(0, targetBranch, currentCommit, configuration, excludedInheritBranches); - - private BranchConfig GetBranchConfigurationInternal(int recursions, IBranch targetBranch, ICommit? currentCommit, Config configuration, IList? excludedInheritBranches = null) - { - if (recursions >= MaxRecursions) - { - throw new InfiniteLoopProtectionException($"Inherited branch configuration caused {recursions} recursions. Aborting!"); - } - - var matchingBranches = configuration.ForBranch(targetBranch); - - if (matchingBranches == null) - { - this.log.Info($"No branch configuration found for branch {targetBranch}, falling back to default configuration"); - - matchingBranches = BranchConfig.CreateDefaultBranchConfig(FallbackConfigName) - .Apply(new BranchConfig - { - Regex = "", - VersioningMode = configuration.VersioningMode, - Increment = configuration.Increment ?? IncrementStrategy.Inherit - }); - } - - if (matchingBranches.Increment == IncrementStrategy.Inherit) - { - matchingBranches = InheritBranchConfiguration(recursions, targetBranch, matchingBranches, currentCommit, configuration, excludedInheritBranches); - if (matchingBranches.Name.IsEquivalentTo(FallbackConfigName) && matchingBranches.Increment == IncrementStrategy.Inherit) - { - // We tried, and failed to inherit, just fall back to patch - matchingBranches.Increment = IncrementStrategy.Patch; - } - } - - return matchingBranches; - - } - - // TODO I think we need to take a fresh approach to this.. it's getting really complex with heaps of edge cases - private BranchConfig InheritBranchConfiguration(int recursions, IBranch targetBranch, BranchConfig branchConfiguration, ICommit? currentCommit, Config configuration, IList? excludedInheritBranches) - { - using (this.log.IndentLog("Attempting to inherit branch configuration from parent branch")) - { - recursions += 1; - - var excludedBranches = new[] { targetBranch }; - // Check if we are a merge commit. If so likely we are a pull request - if (currentCommit != null) - { - var parentCount = currentCommit.Parents.Count(); - if (parentCount == 2) - { - excludedBranches = CalculateWhenMultipleParents(currentCommit, ref targetBranch, excludedBranches); - } - } - - excludedInheritBranches ??= this.repositoryStore.GetExcludedInheritBranches(configuration).ToList(); - - excludedBranches = excludedBranches.Where(b => excludedInheritBranches.All(bte => !b.Equals(bte))).ToArray(); - // Add new excluded branches. - foreach (var excludedBranch in excludedBranches) - { - excludedInheritBranches.Add(excludedBranch); - } - var branchesToEvaluate = this.repositoryStore.ExcludingBranches(excludedInheritBranches) - .Distinct(new LocalRemoteBranchEqualityComparer()) - .ToList(); - - var branchPoint = this.repositoryStore - .FindCommitBranchWasBranchedFrom(targetBranch, configuration, excludedInheritBranches.ToArray()); - List possibleParents; - if (branchPoint == BranchCommit.Empty) - { - possibleParents = this.repositoryStore.GetBranchesContainingCommit(targetBranch.Tip, branchesToEvaluate) - // It fails to inherit Increment branch configuration if more than 1 parent; - // therefore no point to get more than 2 parents - .Take(2) - .ToList(); - } - else - { - var branches = this.repositoryStore.GetBranchesContainingCommit(branchPoint.Commit, branchesToEvaluate).ToList(); - if (branches.Count > 1) - { - var currentTipBranches = this.repositoryStore.GetBranchesContainingCommit(currentCommit, branchesToEvaluate).ToList(); - possibleParents = branches.Except(currentTipBranches).ToList(); - } - else - { - possibleParents = branches; - } - } - - this.log.Info("Found possible parent branches: " + string.Join(", ", possibleParents.Select(p => p.ToString()))); - - if (possibleParents.Count == 1) - { - var branchConfig = GetBranchConfigurationInternal(recursions, possibleParents[0], currentCommit, configuration, excludedInheritBranches); - // If we have resolved a fallback config we should not return that we have got config - if (branchConfig.Name != FallbackConfigName) - { - return new BranchConfig(branchConfiguration) - { - Increment = branchConfig.Increment, - PreventIncrementOfMergedBranchVersion = branchConfig.PreventIncrementOfMergedBranchVersion, - // If we are inheriting from develop then we should behave like develop - TracksReleaseBranches = branchConfig.TracksReleaseBranches - }; - } - } - - // If we fail to inherit it is probably because the branch has been merged and we can't do much. So we will fall back to develop's config - // if develop exists and main if not - var errorMessage = possibleParents.Count == 0 - ? "Failed to inherit Increment branch configuration, no branches found." - : "Failed to inherit Increment branch configuration, ended up with: " + string.Join(", ", possibleParents.Select(p => p.ToString())); - - var chosenBranch = this.repositoryStore.GetChosenBranch(configuration); - if (chosenBranch == null) - { - // TODO We should call the build server to generate this exception, each build server works differently - // for fetch issues and we could give better warnings. - throw new InvalidOperationException("Gitversion could not determine which branch to treat as the development branch (default is 'develop') nor release-able branch (default is 'main' or 'master'), either locally or remotely. Ensure the local clone and checkout match the requirements or considering using 'GitVersion Dynamic Repositories'"); - } - - this.log.Warning($"{errorMessage}{System.Environment.NewLine}Falling back to {chosenBranch} branch config"); - - // To prevent infinite loops, make sure that a new branch was chosen. - if (targetBranch.Equals(chosenBranch)) - { - var developOrMainConfig = - ChooseMainOrDevelopIncrementStrategyIfTheChosenBranchIsOneOfThem( - chosenBranch, branchConfiguration, configuration); - if (developOrMainConfig != null) - { - return developOrMainConfig; - } - - this.log.Warning("Fallback branch wants to inherit Increment branch configuration from itself. Using patch increment instead."); - return new BranchConfig(branchConfiguration) - { - Increment = IncrementStrategy.Patch - }; - } - - var inheritingBranchConfig = GetBranchConfigurationInternal(recursions, chosenBranch, currentCommit, configuration, excludedInheritBranches); - var configIncrement = inheritingBranchConfig.Increment; - if (inheritingBranchConfig.Name.IsEquivalentTo(FallbackConfigName) && configIncrement == IncrementStrategy.Inherit) - { - this.log.Warning("Fallback config inherits by default, dropping to patch increment"); - configIncrement = IncrementStrategy.Patch; - } - - return new BranchConfig(branchConfiguration) - { - Increment = configIncrement, - PreventIncrementOfMergedBranchVersion = inheritingBranchConfig.PreventIncrementOfMergedBranchVersion, - // If we are inheriting from develop then we should behave like develop - TracksReleaseBranches = inheritingBranchConfig.TracksReleaseBranches - }; - } - } - - private IBranch[] CalculateWhenMultipleParents(ICommit currentCommit, ref IBranch currentBranch, IBranch[] excludedBranches) - { - var parents = currentCommit.Parents.ToArray(); - var branches = this.repositoryStore.GetBranchesForCommit(parents[1]).ToList(); - if (branches.Count == 1) - { - var branch = branches[0]; - excludedBranches = new[] - { - currentBranch, - branch - }; - currentBranch = branch; - } - else if (branches.Count > 1) - { - currentBranch = branches.FirstOrDefault(b => b.Name.WithoutRemote == Config.MainBranchKey) ?? branches.First(); - } - else - { - var possibleTargetBranches = this.repositoryStore.GetBranchesForCommit(parents[0]).ToList(); - if (possibleTargetBranches.Count > 1) - { - currentBranch = possibleTargetBranches.FirstOrDefault(b => b.Name.WithoutRemote == Config.MainBranchKey) ?? possibleTargetBranches.First(); - } - else - { - currentBranch = possibleTargetBranches.FirstOrDefault() ?? currentBranch; - } - } - - this.log.Info($"HEAD is merge commit, this is likely a pull request using {currentBranch} as base"); - - return excludedBranches; - } - - - - private static BranchConfig? ChooseMainOrDevelopIncrementStrategyIfTheChosenBranchIsOneOfThem(IBranch chosenBranch, BranchConfig branchConfiguration, Config config) - { - BranchConfig? mainOrDevelopConfig = null; - var developBranchRegex = config.Branches[Config.DevelopBranchKey]?.Regex ?? Config.DevelopBranchRegex; - var mainBranchRegex = config.Branches[Config.MainBranchKey]?.Regex ?? Config.MainBranchRegex; - if (Regex.IsMatch(chosenBranch.Name.Friendly, developBranchRegex, RegexOptions.IgnoreCase)) - { - // Normally we would not expect this to happen but for safety we add a check - if (config.Branches[Config.DevelopBranchKey]?.Increment != - IncrementStrategy.Inherit) - { - mainOrDevelopConfig = new BranchConfig(branchConfiguration) - { - Increment = config.Branches[Config.DevelopBranchKey]?.Increment - }; - } - } - else if (Regex.IsMatch(chosenBranch.Name.Friendly, mainBranchRegex, RegexOptions.IgnoreCase)) - { - // Normally we would not expect this to happen but for safety we add a check - if (config.Branches[Config.MainBranchKey]?.Increment != - IncrementStrategy.Inherit) - { - mainOrDevelopConfig = new BranchConfig(branchConfiguration) - { - Increment = config.Branches[Config.DevelopBranchKey]?.Increment - }; - } - } - return mainOrDevelopConfig; - } - - private class LocalRemoteBranchEqualityComparer : IEqualityComparer - { - public bool Equals(IBranch? b1, IBranch? b2) - { - if (b1 == null && b2 == null) - return true; - if (b1 == null || b2 == null) - return false; - - return b1.Name.WithoutRemote.Equals(b2.Name.WithoutRemote); - } - - public int GetHashCode(IBranch b) => b.Name.WithoutRemote.GetHashCode(); - } -} diff --git a/src/GitVersion.Core/Configuration/ConfigExtensions.cs b/src/GitVersion.Core/Configuration/ConfigExtensions.cs deleted file mode 100644 index 3edf74d0a3..0000000000 --- a/src/GitVersion.Core/Configuration/ConfigExtensions.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System.Text.RegularExpressions; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration; - -public static class ConfigExtensions -{ - public static BranchConfig GetBranchConfiguration(this Config configuration, IBranch branch) - => GetBranchConfiguration(configuration, branch.NotNull().Name.WithoutRemote); - - public static BranchConfig GetBranchConfiguration(this Config configuration, string branchName) - { - var branchConfiguration = ForBranch(configuration, branchName); - if (branchConfiguration is null) - { - branchConfiguration = GetUnknownBranchConfiguration(configuration); - branchConfiguration.Name = branchName; - } - return branchConfiguration; - } - - // TODO: Please make the unknown settings also configurable in the yaml. - public static BranchConfig GetUnknownBranchConfiguration(this Config configuration) => new() - { - Name = "Unknown", - Regex = "", - Tag = "{BranchName}", - VersioningMode = configuration.VersioningMode, - Increment = IncrementStrategy.Inherit - }; - - // TODO: Please make the fallback settings also configurable in the yaml. - public static BranchConfig GetFallbackBranchConfiguration(this Config configuration) - { - var result = new BranchConfig() - { - Name = "Fallback", - Regex = "", - Tag = "{BranchName}", - VersioningMode = configuration.VersioningMode, - Increment = configuration.Increment, - PreventIncrementOfMergedBranchVersion = false, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsReleaseBranch = false, - IsMainline = false - }; - if (result.Increment == IncrementStrategy.Inherit) - { - result.Increment = IncrementStrategy.None; - } - return result; - } - - internal static BranchConfig? ForBranch(this Config configuration, IBranch branch) - => ForBranch(configuration, branch.NotNull().Name.WithoutRemote); - - internal static BranchConfig? ForBranch(this Config configuration, string branchName) - { - var matches = configuration.Branches - .Where(b => b.Value?.Regex != null && Regex.IsMatch(branchName, b.Value.Regex, RegexOptions.IgnoreCase)) - .ToArray(); - - try - { - return matches - .Select(kvp => kvp.Value) - .SingleOrDefault(); - } - catch (InvalidOperationException) - { - var matchingConfigs = string.Concat(matches.Select(m => $"{System.Environment.NewLine} - {m.Key}")); - var picked = matches - .Select(kvp => kvp.Value) - .First(); - - // TODO check how to log this - Console.WriteLine( - $"Multiple branch configurations match the current branch branchName of '{branchName}'. " + - $"Using the first matching configuration, '{picked?.Name}'. Matching configurations include:'{matchingConfigs}'"); - - return picked; - } - } - - public static bool IsReleaseBranch(this Config config, string branchName) => config.GetBranchConfiguration(branchName).IsReleaseBranch ?? false; - - public static string GetBranchSpecificTag(this EffectiveConfiguration configuration, ILog log, string? branchFriendlyName, string? branchNameOverride) - { - var tagToUse = configuration.Tag ?? "{BranchName}"; - if (tagToUse == "useBranchName") - { - tagToUse = "{BranchName}"; - } - if (tagToUse.Contains("{BranchName}")) - { - log.Info("Using branch name to calculate version tag"); - - var branchName = branchNameOverride ?? branchFriendlyName; - if (!configuration.BranchPrefixToTrim.IsNullOrWhiteSpace()) - { - var branchNameTrimmed = branchName?.RegexReplace(configuration.BranchPrefixToTrim, string.Empty, RegexOptions.IgnoreCase); - branchName = branchNameTrimmed.IsNullOrEmpty() ? branchName : branchNameTrimmed; - } - branchName = branchName?.RegexReplace("[^a-zA-Z0-9-]", "-"); - - tagToUse = tagToUse.Replace("{BranchName}", branchName); - } - return tagToUse; - } - - public static List> GetReleaseBranchConfig(this Config configuration) => - configuration.Branches - .Where(b => b.Value.IsReleaseBranch == true) - .ToList(); -} diff --git a/src/GitVersion.Core/Configuration/ConfigFileLocator.cs b/src/GitVersion.Core/Configuration/ConfigFileLocator.cs deleted file mode 100644 index 77fdc6f33e..0000000000 --- a/src/GitVersion.Core/Configuration/ConfigFileLocator.cs +++ /dev/null @@ -1,106 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Helpers; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; -using Microsoft.Extensions.Options; - -namespace GitVersion.Configuration; - -public class ConfigFileLocator : IConfigFileLocator -{ - public const string DefaultFileName = "GitVersion.yml"; - private readonly IFileSystem fileSystem; - public ConfigFileLocator(IFileSystem fileSystem, IOptions options) - { - this.fileSystem = fileSystem; - var configFile = options.Value.ConfigInfo.ConfigFile; - FilePath = !configFile.IsNullOrWhiteSpace() ? configFile : DefaultFileName; - } - - public string FilePath { get; } - - public bool HasConfigFileAt(string workingDirectory) => this.fileSystem.Exists(PathHelper.Combine(workingDirectory, FilePath)); - - public string? GetConfigFilePath(string? workingDirectory) => workingDirectory != null ? PathHelper.Combine(workingDirectory, FilePath) : null; - - public void Verify(string? workingDirectory, string? projectRootDirectory) - { - if (!Path.IsPathRooted(FilePath) && !this.fileSystem.PathsEqual(workingDirectory, projectRootDirectory)) - { - WarnAboutAmbiguousConfigFileSelection(workingDirectory, projectRootDirectory); - } - } - - public string? SelectConfigFilePath(GitVersionOptions gitVersionOptions, IGitRepositoryInfo repositoryInfo) - { - var workingDirectory = gitVersionOptions.WorkingDirectory; - var projectRootDirectory = repositoryInfo.ProjectRootDirectory; - - return GetConfigFilePath(HasConfigFileAt(workingDirectory) ? workingDirectory : projectRootDirectory); - } - - public Config ReadConfig(string workingDirectory) - { - var configFilePath = GetConfigFilePath(workingDirectory); - - if (configFilePath != null && this.fileSystem.Exists(configFilePath)) - { - var readAllText = this.fileSystem.ReadAllText(configFilePath); - var readConfig = ConfigSerializer.Read(new StringReader(readAllText)); - - VerifyReadConfig(readConfig); - - return readConfig; - } - - return new Config(); - } - - public void Verify(GitVersionOptions gitVersionOptions, IGitRepositoryInfo repositoryInfo) - { - if (!gitVersionOptions.RepositoryInfo.TargetUrl.IsNullOrWhiteSpace()) - { - // Assuming this is a dynamic repository. At this stage it's unsure whether we have - // any .git info so we need to skip verification - return; - } - - var workingDirectory = gitVersionOptions.WorkingDirectory; - var projectRootDirectory = repositoryInfo.ProjectRootDirectory; - - Verify(workingDirectory, projectRootDirectory); - } - - private static void VerifyReadConfig(Config config) - { - // Verify no branches are set to mainline mode - if (config.Branches.Any(b => b.Value?.VersioningMode == VersioningMode.Mainline)) - { - throw new ConfigurationException(@"Mainline mode only works at the repository level, a single branch cannot be put into mainline mode - -This is because mainline mode treats your entire git repository as an event source with each merge into the 'mainline' incrementing the version. - -If the docs do not help you decide on the mode open an issue to discuss what you are trying to do."); - } - } - - private void WarnAboutAmbiguousConfigFileSelection(string? workingDirectory, string? projectRootDirectory) - { - var workingConfigFile = GetConfigFilePath(workingDirectory); - var projectRootConfigFile = GetConfigFilePath(projectRootDirectory); - - var hasConfigInWorkingDirectory = workingConfigFile != null && this.fileSystem.Exists(workingConfigFile); - var hasConfigInProjectRootDirectory = projectRootConfigFile != null && this.fileSystem.Exists(projectRootConfigFile); - - if (hasConfigInProjectRootDirectory && hasConfigInWorkingDirectory) - { - throw new WarningException($"Ambiguous config file selection from '{workingConfigFile}' and '{projectRootConfigFile}'"); - } - - if (!hasConfigInProjectRootDirectory && !hasConfigInWorkingDirectory) - { - if (FilePath != DefaultFileName) - throw new WarningException($"The configuration file was not found at '{workingConfigFile}' or '{projectRootConfigFile}'"); - } - } -} diff --git a/src/GitVersion.Core/Configuration/ConfigProvider.cs b/src/GitVersion.Core/Configuration/ConfigProvider.cs deleted file mode 100644 index fc6fe0a586..0000000000 --- a/src/GitVersion.Core/Configuration/ConfigProvider.cs +++ /dev/null @@ -1,63 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; -using Microsoft.Extensions.Options; - -namespace GitVersion.Configuration; - -public class ConfigProvider : IConfigProvider -{ - private readonly IFileSystem fileSystem; - private readonly ILog log; - private readonly IConfigFileLocator configFileLocator; - private readonly IOptions options; - private readonly IConfigInitWizard configInitWizard; - private readonly IGitRepositoryInfo repositoryInfo; - - public ConfigProvider(IFileSystem fileSystem, ILog log, IConfigFileLocator configFileLocator, - IOptions options, IConfigInitWizard configInitWizard, IGitRepositoryInfo repositoryInfo) - { - this.fileSystem = fileSystem.NotNull(); - this.log = log.NotNull(); - this.configFileLocator = configFileLocator.NotNull(); - this.options = options.NotNull(); - this.configInitWizard = configInitWizard.NotNull(); - this.repositoryInfo = repositoryInfo.NotNull(); - } - - public Config Provide(Config? overrideConfig = null) - { - var gitVersionOptions = this.options.Value; - var workingDirectory = gitVersionOptions.WorkingDirectory; - var projectRootDirectory = this.repositoryInfo.ProjectRootDirectory; - - var rootDirectory = this.configFileLocator.HasConfigFileAt(workingDirectory) ? workingDirectory : projectRootDirectory; - return Provide(rootDirectory, overrideConfig); - } - - public Config Provide(string? workingDirectory, Config? overrideConfig = null) - { - var configurationBuilder = new ConfigurationBuilder(); - if (workingDirectory != null) - configurationBuilder = configurationBuilder.Add(this.configFileLocator.ReadConfig(workingDirectory)); - return configurationBuilder - .Add(overrideConfig ?? new Config()) - .Build(); - } - - public void Init(string workingDirectory) - { - var configFilePath = this.configFileLocator.GetConfigFilePath(workingDirectory); - var currentConfiguration = this.configFileLocator.ReadConfig(workingDirectory); - - var config = this.configInitWizard.Run(currentConfiguration, workingDirectory); - if (config == null || configFilePath == null) return; - - using var stream = this.fileSystem.OpenWrite(configFilePath); - using var writer = new StreamWriter(stream); - this.log.Info("Saving config file"); - ConfigSerializer.Write(config, writer); - stream.Flush(); - } -} diff --git a/src/GitVersion.Core/Configuration/ConfigSerializer.cs b/src/GitVersion.Core/Configuration/ConfigSerializer.cs deleted file mode 100644 index 47253abb55..0000000000 --- a/src/GitVersion.Core/Configuration/ConfigSerializer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using GitVersion.Model.Configuration; -using YamlDotNet.Serialization; -using YamlDotNet.Serialization.NamingConventions; - -namespace GitVersion.Configuration; - -public class ConfigSerializer -{ - public static Config Read(TextReader reader) - { - var deserializer = new DeserializerBuilder() - .WithNamingConvention(HyphenatedNamingConvention.Instance) - .Build(); - var config = deserializer.Deserialize(reader); - return config ?? new Config(); - } - - public static void Write(Config config, TextWriter writer) - { - var serializer = new SerializerBuilder() - .ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitDefaults) - .WithNamingConvention(HyphenatedNamingConvention.Instance) - .Build(); - serializer.Serialize(writer, config); - } -} diff --git a/src/GitVersion.Core/Configuration/ConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/ConfigurationBuilder.cs deleted file mode 100644 index 57aac7e158..0000000000 --- a/src/GitVersion.Core/Configuration/ConfigurationBuilder.cs +++ /dev/null @@ -1,329 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; - -namespace GitVersion.Configuration; - -public class ConfigurationBuilder -{ - private const int DefaultTagPreReleaseWeight = 60000; - - private readonly List overrides = new(); - - public ConfigurationBuilder Add(Config config) - { - if (config == null) throw new ArgumentNullException(nameof(config)); - - this.overrides.Add(config); - return this; - } - - public Config Build() - { - var config = CreateDefaultConfiguration(); - - foreach (var overrideConfig in this.overrides) - { - ApplyOverrides(config, overrideConfig); - } - - FinalizeConfiguration(config); - ValidateConfiguration(config); - - return config; - } - - private static void ApplyOverrides(Config targetConfig, Config overrideConfig) - { - targetConfig.AssemblyVersioningScheme = overrideConfig.AssemblyVersioningScheme ?? targetConfig.AssemblyVersioningScheme; - targetConfig.AssemblyFileVersioningScheme = overrideConfig.AssemblyFileVersioningScheme ?? targetConfig.AssemblyFileVersioningScheme; - targetConfig.AssemblyInformationalFormat = overrideConfig.AssemblyInformationalFormat ?? targetConfig.AssemblyInformationalFormat; - targetConfig.AssemblyVersioningFormat = overrideConfig.AssemblyVersioningFormat ?? targetConfig.AssemblyVersioningFormat; - targetConfig.AssemblyFileVersioningFormat = overrideConfig.AssemblyFileVersioningFormat ?? targetConfig.AssemblyFileVersioningFormat; - targetConfig.VersioningMode = overrideConfig.VersioningMode ?? targetConfig.VersioningMode; - targetConfig.TagPrefix = overrideConfig.TagPrefix ?? targetConfig.TagPrefix; - targetConfig.ContinuousDeploymentFallbackTag = overrideConfig.ContinuousDeploymentFallbackTag ?? targetConfig.ContinuousDeploymentFallbackTag; - targetConfig.NextVersion = overrideConfig.NextVersion ?? targetConfig.NextVersion; - targetConfig.MajorVersionBumpMessage = overrideConfig.MajorVersionBumpMessage ?? targetConfig.MajorVersionBumpMessage; - targetConfig.MinorVersionBumpMessage = overrideConfig.MinorVersionBumpMessage ?? targetConfig.MinorVersionBumpMessage; - targetConfig.PatchVersionBumpMessage = overrideConfig.PatchVersionBumpMessage ?? targetConfig.PatchVersionBumpMessage; - targetConfig.NoBumpMessage = overrideConfig.NoBumpMessage ?? targetConfig.NoBumpMessage; - targetConfig.LegacySemVerPadding = overrideConfig.LegacySemVerPadding ?? targetConfig.LegacySemVerPadding; - targetConfig.BuildMetaDataPadding = overrideConfig.BuildMetaDataPadding ?? targetConfig.BuildMetaDataPadding; - targetConfig.CommitsSinceVersionSourcePadding = overrideConfig.CommitsSinceVersionSourcePadding ?? targetConfig.CommitsSinceVersionSourcePadding; - targetConfig.TagPreReleaseWeight = overrideConfig.TagPreReleaseWeight ?? targetConfig.TagPreReleaseWeight; - targetConfig.CommitMessageIncrementing = overrideConfig.CommitMessageIncrementing ?? targetConfig.CommitMessageIncrementing; - targetConfig.Increment = overrideConfig.Increment ?? targetConfig.Increment; - targetConfig.CommitDateFormat = overrideConfig.CommitDateFormat ?? targetConfig.CommitDateFormat; - targetConfig.MergeMessageFormats = overrideConfig.MergeMessageFormats.Any() ? overrideConfig.MergeMessageFormats : targetConfig.MergeMessageFormats; - targetConfig.UpdateBuildNumber = overrideConfig.UpdateBuildNumber ?? targetConfig.UpdateBuildNumber; - - if (overrideConfig.Ignore is { IsEmpty: false }) - { - targetConfig.Ignore = overrideConfig.Ignore; - } - - ApplyBranchOverrides(targetConfig, overrideConfig); - } - - private static void ApplyBranchOverrides(Config targetConfig, Config overrideConfig) - { - if (overrideConfig.Branches is { Count: > 0 }) - { - // We can't just add new configs to the targetConfig.Branches, and have to create a new dictionary. - // The reason is that GitVersion 5.3.x (and earlier) merges default configs into overrides. The new approach is opposite: we merge overrides into default config. - // The important difference of these approaches is the order of branches in a dictionary (we should not rely on Dictionary's implementation details, but we already did that): - // Old approach: { new-branch-1, new-branch-2, default-branch-1, default-branch-2, ... } - // New approach: { default-branch-1, default-branch-2, ..., new-branch-1, new-branch-2 } - // In case when several branch configurations match the current branch (by regex), we choose the first one. - // So we have to add new branches to the beginning of a dictionary to preserve 5.3.x behavior. - - var newBranches = new Dictionary(); - - var targetConfigBranches = targetConfig.Branches; - - foreach (var (name, branchConfig) in overrideConfig.Branches) - { - // for compatibility reason we check if it's master, we rename it to main - var branchName = name == Config.MasterBranchKey ? Config.MainBranchKey : name; - if (!targetConfigBranches.TryGetValue(branchName, out var target)) - { - target = new BranchConfig() { Name = branchName }; - } - - branchConfig.MergeTo(target); - if (target.SourceBranches != null && target.SourceBranches.Contains(Config.MasterBranchKey)) - { - target.SourceBranches.Remove(Config.MasterBranchKey); - target.SourceBranches.Add(Config.MainBranchKey); - } - newBranches[branchName] = target; - } - - foreach (var (name, branchConfig) in targetConfigBranches) - { - if (!newBranches.ContainsKey(name)) - { - newBranches[name] = branchConfig; - } - } - - targetConfig.Branches = newBranches; - } - } - - private static void FinalizeConfiguration(Config config) - { - foreach (var (name, branchConfig) in config.Branches) - { - FinalizeBranchConfiguration(config, name, branchConfig); - } - } - - private static void FinalizeBranchConfiguration(Config config, string name, BranchConfig branchConfig) - { - branchConfig.Name = name; - branchConfig.Increment ??= config.Increment ?? IncrementStrategy.Inherit; - - if (branchConfig.VersioningMode == null) - { - if (name == Config.DevelopBranchKey) - { - branchConfig.VersioningMode = config.VersioningMode == VersioningMode.Mainline ? VersioningMode.Mainline : VersioningMode.ContinuousDeployment; - } - else - { - branchConfig.VersioningMode = config.VersioningMode; - } - } - - if (branchConfig.IsSourceBranchFor == null) - return; - - foreach (var targetBranchName in branchConfig.IsSourceBranchFor) - { - var targetBranchConfig = config.Branches[targetBranchName]; - targetBranchConfig.SourceBranches ??= new HashSet(); - targetBranchConfig.SourceBranches.Add(name); - } - } - - private static void ValidateConfiguration(Config config) - { - foreach (var (name, branchConfig) in config.Branches) - { - var regex = branchConfig?.Regex; - var helpUrl = $"{System.Environment.NewLine}See https://gitversion.net/docs/reference/configuration for more info"; - - if (regex == null) - { - throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'regex'{helpUrl}"); - } - - var sourceBranches = branchConfig?.SourceBranches; - if (sourceBranches == null) - { - throw new ConfigurationException($"Branch configuration '{name}' is missing required configuration 'source-branches'{helpUrl}"); - } - - var missingSourceBranches = sourceBranches.Where(sb => !config.Branches.ContainsKey(sb)).ToArray(); - if (missingSourceBranches.Any()) - throw new ConfigurationException($"Branch configuration '{name}' defines these 'source-branches' that are not configured: '[{string.Join(",", missingSourceBranches)}]'{helpUrl}"); - } - } - - private static Config CreateDefaultConfiguration() - { - var config = new Config - { - AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch, - AssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch, - TagPrefix = Config.DefaultTagPrefix, - VersioningMode = VersioningMode.ContinuousDelivery, - ContinuousDeploymentFallbackTag = "ci", - MajorVersionBumpMessage = IncrementStrategyFinder.DefaultMajorPattern, - MinorVersionBumpMessage = IncrementStrategyFinder.DefaultMinorPattern, - PatchVersionBumpMessage = IncrementStrategyFinder.DefaultPatchPattern, - NoBumpMessage = IncrementStrategyFinder.DefaultNoBumpPattern, - CommitMessageIncrementing = CommitMessageIncrementMode.Enabled, - LegacySemVerPadding = 4, - BuildMetaDataPadding = 4, - CommitsSinceVersionSourcePadding = 4, - CommitDateFormat = "yyyy-MM-dd", - UpdateBuildNumber = true, - TagPreReleaseWeight = DefaultTagPreReleaseWeight, - Increment = IncrementStrategy.Inherit - }; - - AddBranchConfig(Config.DevelopBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.Minor, - Regex = Config.DevelopBranchRegex, - SourceBranches = new HashSet(), - Tag = "alpha", - PreventIncrementOfMergedBranchVersion = false, - TrackMergeTarget = true, - TracksReleaseBranches = true, - IsMainline = false, - IsReleaseBranch = false, - PreReleaseWeight = 0 - }); - - AddBranchConfig(Config.MainBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.Patch, - Regex = Config.MainBranchRegex, - SourceBranches = new HashSet { - Config.DevelopBranchKey, - Config.ReleaseBranchKey - }, - Tag = string.Empty, - PreventIncrementOfMergedBranchVersion = true, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsMainline = true, - IsReleaseBranch = false, - PreReleaseWeight = 55000 - }); - - AddBranchConfig(Config.ReleaseBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.None, - Regex = Config.ReleaseBranchRegex, - SourceBranches = new HashSet { - Config.DevelopBranchKey, - Config.MainBranchKey, - Config.SupportBranchKey, - Config.ReleaseBranchKey - }, - Tag = "beta", - PreventIncrementOfMergedBranchVersion = true, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsMainline = false, - IsReleaseBranch = true, - PreReleaseWeight = 30000 - }); - - AddBranchConfig(Config.FeatureBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.Inherit, - Regex = Config.FeatureBranchRegex, - SourceBranches = new HashSet { - Config.DevelopBranchKey, - Config.MainBranchKey, - Config.ReleaseBranchKey, - Config.FeatureBranchKey, - Config.SupportBranchKey, - Config.HotfixBranchKey - }, - Tag = "{BranchName}", - PreReleaseWeight = 30000 - }); - - AddBranchConfig(Config.PullRequestBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.Inherit, - Regex = Config.PullRequestRegex, - SourceBranches = new HashSet { - Config.DevelopBranchKey, - Config.MainBranchKey, - Config.ReleaseBranchKey, - Config.FeatureBranchKey, - Config.SupportBranchKey, - Config.HotfixBranchKey - }, - Tag = "PullRequest", - TagNumberPattern = @"[/-](?\d+)", - PreReleaseWeight = 30000 - }); - - AddBranchConfig(Config.HotfixBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.Patch, - Regex = Config.HotfixBranchRegex, - SourceBranches = new HashSet { - Config.ReleaseBranchKey, - Config.MainBranchKey, - Config.SupportBranchKey, - Config.HotfixBranchKey - }, - Tag = "beta", - PreventIncrementOfMergedBranchVersion = false, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsMainline = false, - IsReleaseBranch = false, - PreReleaseWeight = 30000 - }); - - AddBranchConfig(Config.SupportBranchKey, - new BranchConfig - { - Increment = IncrementStrategy.Patch, - Regex = Config.SupportBranchRegex, - SourceBranches = new HashSet { Config.MainBranchKey }, - Tag = string.Empty, - PreventIncrementOfMergedBranchVersion = true, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsMainline = true, - IsReleaseBranch = false, - PreReleaseWeight = 55000 - }); - - return config; - - void AddBranchConfig(string name, BranchConfig overrides) - { - var emptyBranchConfiguration = new BranchConfig() { Name = name }; - config.Branches[name] = emptyBranchConfiguration.Apply(overrides); - } - } -} diff --git a/src/GitVersion.Core/Configuration/ConfigurationConstants.cs b/src/GitVersion.Core/Configuration/ConfigurationConstants.cs new file mode 100644 index 0000000000..231633c927 --- /dev/null +++ b/src/GitVersion.Core/Configuration/ConfigurationConstants.cs @@ -0,0 +1,51 @@ +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal static class ConfigurationConstants +{ + internal const string NameOfDefaultAssemblyVersioningScheme = nameof(AssemblyVersioningScheme.MajorMinorPatch); + internal const string NameOfDefaultAssemblyFileVersioningScheme = nameof(AssemblyFileVersioningScheme.MajorMinorPatch); + internal const string StringDefaultSemanticVersionFormat = nameof(SemanticVersionFormat.Strict); + internal const string StringDefaultTagPreReleaseWeight = "60000"; + internal const string StringDefaultUpdateBuildNumber = "true"; + + public const AssemblyVersioningScheme DefaultAssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch; + public const AssemblyFileVersioningScheme DefaultAssemblyFileVersioningScheme = AssemblyFileVersioningScheme.MajorMinorPatch; + public const SemanticVersionFormat DefaultSemanticVersionFormat = SemanticVersionFormat.Strict; + public static readonly VersionStrategies[] DefaultVersionStrategies = [ + VersionStrategies.Fallback, + VersionStrategies.ConfiguredNextVersion, + VersionStrategies.MergeMessage, + VersionStrategies.TaggedCommit, + VersionStrategies.TrackReleaseBranches, + VersionStrategies.VersionInBranchName + ]; + public const string DefaultAssemblyInformationalFormat = "{InformationalVersion}"; + public const string DefaultTagPrefix = "[vV]?"; + public const string DefaultVersionInBranchPattern = @"(?[vV]?\d+(\.\d+)?(\.\d+)?).*"; + public const string DefaultCommitDateFormat = "yyyy-MM-dd"; + public const string BranchNamePlaceholder = "{BranchName}"; + public const string DefaultLabelNumberPattern = @"[/-](?\d+)"; + public const bool DefaultUpdateBuildNumber = true; + public const int DefaultTagPreReleaseWeight = 60000; + + public const string MainBranchKey = "main"; + public const string MasterBranchKey = "master"; + public const string DevelopBranchKey = "develop"; + public const string ReleaseBranchKey = "release"; + public const string FeatureBranchKey = "feature"; + public const string PullRequestBranchKey = "pull-request"; + public const string HotfixBranchKey = "hotfix"; + public const string SupportBranchKey = "support"; + public const string UnknownBranchKey = "unknown"; + + public const string MainBranchRegex = "^master$|^main$"; + public const string DevelopBranchRegex = "^dev(elop)?(ment)?$"; + public const string ReleaseBranchRegex = "^releases?[/-](?.+)"; + public const string FeatureBranchRegex = "^features?[/-](?.+)"; + public const string PullRequestBranchRegex = @"^(pull|pull\-requests|pr)[/-]"; + public const string HotfixBranchRegex = "^hotfix(es)?[/-](?.+)"; + public const string SupportBranchRegex = "^support[/-](?.+)"; + public const string UnknownBranchRegex = "(?.+)"; +} diff --git a/src/GitVersion.Core/Configuration/ConfigurationModule.cs b/src/GitVersion.Core/Configuration/ConfigurationModule.cs deleted file mode 100644 index cadd2afb47..0000000000 --- a/src/GitVersion.Core/Configuration/ConfigurationModule.cs +++ /dev/null @@ -1,17 +0,0 @@ -using GitVersion.Configuration.Init; -using GitVersion.Extensions; -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion.Configuration; - -public class ConfigurationModule : IGitVersionModule -{ - public void RegisterTypes(IServiceCollection services) - { - services.AddModule(new GitVersionInitModule()); - - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - } -} diff --git a/src/GitVersion.Core/Configuration/EffectiveBranchConfiguration.cs b/src/GitVersion.Core/Configuration/EffectiveBranchConfiguration.cs new file mode 100644 index 0000000000..1ad5c523b1 --- /dev/null +++ b/src/GitVersion.Core/Configuration/EffectiveBranchConfiguration.cs @@ -0,0 +1,11 @@ +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.Configuration; + +public record EffectiveBranchConfiguration(EffectiveConfiguration Value, IBranch Branch) +{ + public IBranch Branch { get; } = Branch.NotNull(); + + public EffectiveConfiguration Value { get; } = Value.NotNull(); +} diff --git a/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs new file mode 100644 index 0000000000..9708f95329 --- /dev/null +++ b/src/GitVersion.Core/Configuration/EffectiveConfiguration.cs @@ -0,0 +1,148 @@ +using System.Text.RegularExpressions; +using GitVersion.Extensions; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +/// +/// Configuration can be applied to different things, effective configuration is the result after applying the +/// appropriate configuration +/// +public record EffectiveConfiguration +{ + public EffectiveConfiguration(IGitVersionConfiguration configuration, IBranchConfiguration branchConfiguration, + EffectiveConfiguration? fallbackConfiguration = null) + { + configuration.NotNull(); + branchConfiguration.NotNull(); + + if (fallbackConfiguration is null) + { + var fallbackBranchConfiguration = configuration.GetFallbackBranchConfiguration(); + branchConfiguration = branchConfiguration.Inherit(fallbackBranchConfiguration); + } + else + { + branchConfiguration = branchConfiguration.Inherit(fallbackConfiguration); + } + + if (!branchConfiguration.DeploymentMode.HasValue) + throw new("Configuration value for 'Deployment mode' has no value. (this should not happen, please report an issue)"); + + if (!configuration.AssemblyVersioningScheme.HasValue) + throw new("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); + + if (!configuration.AssemblyFileVersioningScheme.HasValue) + throw new("Configuration value for 'AssemblyFileVersioningScheme' has no value. (this should not happen, please report an issue)"); + + if (!branchConfiguration.CommitMessageIncrementing.HasValue) + throw new("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)"); + + if (!configuration.TagPreReleaseWeight.HasValue) + throw new("Configuration value for 'TagPreReleaseWeight' has no value. (this should not happen, please report an issue)"); + + if (configuration.CommitDateFormat.IsNullOrEmpty()) + throw new("Configuration value for 'CommitDateFormat' has no value. (this should not happen, please report an issue)"); + + AssemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value; + AssemblyFileVersioningScheme = configuration.AssemblyFileVersioningScheme.Value; + AssemblyInformationalFormat = configuration.AssemblyInformationalFormat; + AssemblyVersioningFormat = configuration.AssemblyVersioningFormat; + AssemblyFileVersioningFormat = configuration.AssemblyFileVersioningFormat; + DeploymentMode = branchConfiguration.DeploymentMode.Value; + TagPrefix = configuration.TagPrefix; + VersionInBranchRegex = configuration.VersionInBranchRegex; + Label = branchConfiguration.Label; + NextVersion = configuration.NextVersion; + Increment = branchConfiguration.Increment; + RegularExpression = branchConfiguration.RegularExpression; + PreventIncrementOfMergedBranch = branchConfiguration.PreventIncrement.OfMergedBranch ?? false; + PreventIncrementWhenBranchMerged = branchConfiguration.PreventIncrement.WhenBranchMerged ?? false; + PreventIncrementWhenCurrentCommitTagged = branchConfiguration.PreventIncrement.WhenCurrentCommitTagged ?? true; + LabelNumberPattern = branchConfiguration.LabelNumberPattern; + TrackMergeTarget = branchConfiguration.TrackMergeTarget ?? false; + TrackMergeMessage = branchConfiguration.TrackMergeMessage ?? true; + MajorVersionBumpMessage = configuration.MajorVersionBumpMessage; + MinorVersionBumpMessage = configuration.MinorVersionBumpMessage; + PatchVersionBumpMessage = configuration.PatchVersionBumpMessage; + NoBumpMessage = configuration.NoBumpMessage; + CommitMessageIncrementing = branchConfiguration.CommitMessageIncrementing.Value; + VersionFilters = configuration.Ignore.ToFilters(); + Ignore = configuration.Ignore; + TracksReleaseBranches = branchConfiguration.TracksReleaseBranches ?? false; + IsReleaseBranch = branchConfiguration.IsReleaseBranch ?? false; + IsMainBranch = branchConfiguration.IsMainBranch ?? false; + CommitDateFormat = configuration.CommitDateFormat; + UpdateBuildNumber = configuration.UpdateBuildNumber; + SemanticVersionFormat = configuration.SemanticVersionFormat; + VersionStrategy = configuration.VersionStrategy; + PreReleaseWeight = branchConfiguration.PreReleaseWeight ?? 0; + TagPreReleaseWeight = configuration.TagPreReleaseWeight.Value; + } + + public bool TracksReleaseBranches { get; } + public bool IsReleaseBranch { get; } + public bool IsMainBranch { get; } + public DeploymentMode DeploymentMode { get; } + public AssemblyVersioningScheme AssemblyVersioningScheme { get; } + public AssemblyFileVersioningScheme AssemblyFileVersioningScheme { get; } + public string? AssemblyInformationalFormat { get; } + public string? AssemblyVersioningFormat { get; } + public string? AssemblyFileVersioningFormat { get; } + + /// + /// Git tag prefix + /// + public string? TagPrefix { get; } + + public Regex VersionInBranchRegex { get; } + + /// + /// Label to use when calculating SemVer + /// + public string? Label { get; } + + public string? NextVersion { get; } + + public IncrementStrategy Increment { get; } + + public string? RegularExpression { get; } + + public bool PreventIncrementOfMergedBranch { get; } + + public bool PreventIncrementWhenBranchMerged { get; } + + public bool PreventIncrementWhenCurrentCommitTagged { get; } + + public string? LabelNumberPattern { get; } + + public bool TrackMergeTarget { get; } + + public bool TrackMergeMessage { get; } + + public string? MajorVersionBumpMessage { get; } + + public string? MinorVersionBumpMessage { get; } + + public string? PatchVersionBumpMessage { get; } + + public string? NoBumpMessage { get; } + + public CommitMessageIncrementMode CommitMessageIncrementing { get; } + + public IEnumerable VersionFilters { get; } + + public IIgnoreConfiguration Ignore { get; } + + public string? CommitDateFormat { get; } + + public bool UpdateBuildNumber { get; } + + public SemanticVersionFormat SemanticVersionFormat { get; } + + public VersionStrategies VersionStrategy { get; } + + public int PreReleaseWeight { get; } + + public int TagPreReleaseWeight { get; } +} diff --git a/src/GitVersion.Core/Configuration/IBranchConfiguration.cs b/src/GitVersion.Core/Configuration/IBranchConfiguration.cs new file mode 100644 index 0000000000..52d05a612f --- /dev/null +++ b/src/GitVersion.Core/Configuration/IBranchConfiguration.cs @@ -0,0 +1,44 @@ +using System.Text.RegularExpressions; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +public interface IBranchConfiguration +{ + DeploymentMode? DeploymentMode { get; } + + string? Label { get; } + + IncrementStrategy Increment { get; } + + IPreventIncrementConfiguration PreventIncrement { get; } + + string? LabelNumberPattern { get; } + + bool? TrackMergeTarget { get; } + + bool? TrackMergeMessage { get; } + + CommitMessageIncrementMode? CommitMessageIncrementing { get; } + + public string? RegularExpression { get; } + + public bool IsMatch(string branchName) + => RegularExpression != null && Regex.IsMatch(branchName, RegularExpression, RegexOptions.IgnoreCase); + + IReadOnlyCollection SourceBranches { get; } + + IReadOnlyCollection IsSourceBranchFor { get; } + + bool? TracksReleaseBranches { get; } + + bool? IsReleaseBranch { get; } + + bool? IsMainBranch { get; } + + int? PreReleaseWeight { get; } + + IBranchConfiguration Inherit(IBranchConfiguration configuration); + + IBranchConfiguration Inherit(EffectiveConfiguration configuration); +} diff --git a/src/GitVersion.Core/Configuration/IConfigurationBuilder.cs b/src/GitVersion.Core/Configuration/IConfigurationBuilder.cs new file mode 100644 index 0000000000..1eabfff749 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IConfigurationBuilder.cs @@ -0,0 +1,8 @@ +namespace GitVersion.Configuration; + +internal interface IConfigurationBuilder +{ + void AddOverride(IReadOnlyDictionary value); + + IGitVersionConfiguration Build(); +} diff --git a/src/GitVersion.Core/Configuration/IConfigurationFileLocator.cs b/src/GitVersion.Core/Configuration/IConfigurationFileLocator.cs new file mode 100644 index 0000000000..2ab64908cd --- /dev/null +++ b/src/GitVersion.Core/Configuration/IConfigurationFileLocator.cs @@ -0,0 +1,7 @@ +namespace GitVersion.Configuration; + +public interface IConfigurationFileLocator +{ + void Verify(string? workingDirectory, string? projectRootDirectory); + string? GetConfigurationFile(string? directory); +} diff --git a/src/GitVersion.Core/Configuration/IConfigurationProvider.cs b/src/GitVersion.Core/Configuration/IConfigurationProvider.cs new file mode 100644 index 0000000000..14a4731776 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IConfigurationProvider.cs @@ -0,0 +1,6 @@ +namespace GitVersion.Configuration; + +public interface IConfigurationProvider +{ + IGitVersionConfiguration Provide(IReadOnlyDictionary? overrideConfiguration = null); +} diff --git a/src/GitVersion.Core/Configuration/IConfigurationSerializer.cs b/src/GitVersion.Core/Configuration/IConfigurationSerializer.cs new file mode 100644 index 0000000000..312e0e3feb --- /dev/null +++ b/src/GitVersion.Core/Configuration/IConfigurationSerializer.cs @@ -0,0 +1,8 @@ +namespace GitVersion.Configuration; + +internal interface IConfigurationSerializer +{ + public T Deserialize(string input); + string Serialize(object graph); + public IGitVersionConfiguration? ReadConfiguration(string input); +} diff --git a/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs new file mode 100644 index 0000000000..60307b3cd1 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IGitVersionConfiguration.cs @@ -0,0 +1,53 @@ +using System.Text.RegularExpressions; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +public interface IGitVersionConfiguration : IBranchConfiguration +{ + string? Workflow { get; } + + AssemblyVersioningScheme? AssemblyVersioningScheme { get; } + + AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; } + + string? AssemblyInformationalFormat { get; } + + string? AssemblyVersioningFormat { get; } + + string? AssemblyFileVersioningFormat { get; } + + string? TagPrefix { get; } + + string? VersionInBranchPattern { get; } + + Regex VersionInBranchRegex { get; } + + string? NextVersion { get; } + + string? MajorVersionBumpMessage { get; } + + string? MinorVersionBumpMessage { get; } + + string? PatchVersionBumpMessage { get; } + + string? NoBumpMessage { get; } + + int? TagPreReleaseWeight { get; } + + string? CommitDateFormat { get; } + + IReadOnlyDictionary MergeMessageFormats { get; } + + bool UpdateBuildNumber { get; } + + SemanticVersionFormat SemanticVersionFormat { get; } + + VersionStrategies VersionStrategy { get; } + + IReadOnlyDictionary Branches { get; } + + IIgnoreConfiguration Ignore { get; } + + IBranchConfiguration GetEmptyBranchConfiguration(); +} diff --git a/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs new file mode 100644 index 0000000000..21efe431d6 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IIgnoreConfiguration.cs @@ -0,0 +1,10 @@ +namespace GitVersion.Configuration; + +public interface IIgnoreConfiguration +{ + DateTimeOffset? Before { get; } + + IReadOnlySet Shas { get; } + + public bool IsEmpty => Before == null && Shas.Count == 0; +} diff --git a/src/GitVersion.Core/Configuration/IPreventIncrementConfiguration.cs b/src/GitVersion.Core/Configuration/IPreventIncrementConfiguration.cs new file mode 100644 index 0000000000..1769ed0cac --- /dev/null +++ b/src/GitVersion.Core/Configuration/IPreventIncrementConfiguration.cs @@ -0,0 +1,10 @@ +namespace GitVersion.Configuration; + +public interface IPreventIncrementConfiguration +{ + public bool? OfMergedBranch { get; } + + public bool? WhenBranchMerged { get; } + + public bool? WhenCurrentCommitTagged { get; } +} diff --git a/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs b/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs new file mode 100644 index 0000000000..d99c33db76 --- /dev/null +++ b/src/GitVersion.Core/Configuration/IgnoreConfigurationExtensions.cs @@ -0,0 +1,34 @@ +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.Configuration; + +internal static class IgnoreConfigurationExtensions +{ + public static IEnumerable Filter(this IIgnoreConfiguration ignore, IEnumerable source) + { + ignore.NotNull(); + source.NotNull(); + + if (!ignore.IsEmpty) + { + return source.Where(element => ShouldBeIgnored(element.Commit, ignore)); + } + return source; + } + + public static IEnumerable Filter(this IIgnoreConfiguration ignore, IEnumerable source) + { + ignore.NotNull(); + source.NotNull(); + + if (!ignore.IsEmpty) + { + return source.Where(element => ShouldBeIgnored(element, ignore)); + } + return source; + } + + private static bool ShouldBeIgnored(ICommit commit, IIgnoreConfiguration ignore) + => !(commit.When <= ignore.Before) && !ignore.Shas.Contains(commit.Sha); +} diff --git a/src/GitVersion.Core/Configuration/Init/BuildServer/AppVeyorSetup.cs b/src/GitVersion.Core/Configuration/Init/BuildServer/AppVeyorSetup.cs deleted file mode 100644 index f2a9e1e1be..0000000000 --- a/src/GitVersion.Core/Configuration/Init/BuildServer/AppVeyorSetup.cs +++ /dev/null @@ -1,133 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Helpers; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.BuildServer; - -internal enum ProjectVisibility -{ - Public = 0, - Private = 1 -} - -internal class AppVeyorSetup : ConfigInitWizardStep -{ - private ProjectVisibility projectVisibility; - - public AppVeyorSetup(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - public AppVeyorSetup WithData(ProjectVisibility visibility) - { - this.projectVisibility = visibility; - return this; - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - var editConfigStep = this.StepFactory.CreateStep(); - switch (result) - { - case "0": - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "1": - GenerateBasicConfig(workingDirectory); - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "2": - GenerateNuGetConfig(workingDirectory); - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - } - return StepResult.InvalidResponseSelected(); - } - - private static string GetGvCommand(ProjectVisibility visibility) => visibility switch - { - ProjectVisibility.Public => " - ps: gitversion /l console /output buildserver /updateAssemblyInfo", - ProjectVisibility.Private => " - ps: gitversion $env:APPVEYOR_BUILD_FOLDER /l console /output buildserver /updateAssemblyInfo /nofetch /b $env:APPVEYOR_REPO_BRANCH", - _ => "" - }; - - private void GenerateBasicConfig(string workingDirectory) => WriteConfig(workingDirectory, this.FileSystem, $@"install: - - choco install gitversion.portable -pre -y - -before_build: - - nuget restore -{GetGvCommand(this.projectVisibility)} - -build: - project: "); - - private void GenerateNuGetConfig(string workingDirectory) => WriteConfig(workingDirectory, this.FileSystem, $@"install: - - choco install gitversion.portable -pre -y - -assembly_info: - patch: false - -before_build: - - nuget restore -{GetGvCommand(this.projectVisibility)} - -build: - project: - -after_build: - - cmd: ECHO nuget pack \.nuspec -version ""%GitVersion_NuGetVersion%"" -prop ""target=%CONFIGURATION%"" - - cmd: nuget pack \.nuspec -version ""%GitVersion_NuGetVersion%"" -prop ""target=%CONFIGURATION%"" - - cmd: appveyor PushArtifact "".%GitVersion_NuGetVersion%.nupkg"""); - - private void WriteConfig(string workingDirectory, IFileSystem fileSystem, string configContents) - { - var outputFilename = GetOutputFilename(workingDirectory, fileSystem); - fileSystem.WriteAllText(outputFilename, configContents); - this.Log.Info($"AppVeyor sample config file written to {outputFilename}"); - } - - protected override string GetPrompt(Config config, string workingDirectory) - { - var prompt = new StringBuilder(); - if (AppVeyorConfigExists(workingDirectory, this.FileSystem)) - { - prompt.AppendLine("GitVersion doesn't support modifying existing appveyor config files. We will generate appveyor.gitversion.yml instead"); - prompt.AppendLine(); - } - - prompt.Append(@"What sort of config template would you like generated? - -0) Go Back -1) Generate basic (gitversion + msbuild) configuration -2) Generate with NuGet package publish"); - - return prompt.ToString(); - } - - private static string GetOutputFilename(string workingDirectory, IFileSystem fileSystem) - { - if (AppVeyorConfigExists(workingDirectory, fileSystem)) - { - var count = 0; - do - { - var path = PathHelper.Combine(workingDirectory, $"appveyor.gitversion{(count == 0 ? string.Empty : "." + count)}.yml"); - - if (!fileSystem.Exists(path)) - { - return path; - } - - count++; - } while (count < 10); - throw new Exception("appveyor.gitversion.yml -> appveyor.gitversion.9.yml all exist. Pretty sure you have enough templates"); - } - - return PathHelper.Combine(workingDirectory, "appveyor.yml"); - } - - private static bool AppVeyorConfigExists(string workingDirectory, IFileSystem fileSystem) => fileSystem.Exists(PathHelper.Combine(workingDirectory, "appveyor.yml")); - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/BuildServer/AppveyorPublicPrivate.cs b/src/GitVersion.Core/Configuration/Init/BuildServer/AppveyorPublicPrivate.cs deleted file mode 100644 index 53e0ae5bba..0000000000 --- a/src/GitVersion.Core/Configuration/Init/BuildServer/AppveyorPublicPrivate.cs +++ /dev/null @@ -1,39 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.BuildServer; - -internal class AppveyorPublicPrivate : ConfigInitWizardStep -{ - public AppveyorPublicPrivate(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result) - { - case "0": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "1": - steps.Enqueue(this.StepFactory.CreateStep().WithData(ProjectVisibility.Public)); - return StepResult.Ok(); - case "2": - steps.Enqueue(this.StepFactory.CreateStep().WithData(ProjectVisibility.Private)); - return StepResult.Ok(); - } - return StepResult.Ok(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"Is your project public or private? - -That is ... does it require authentication to clone/pull? - -0) Go Back -1) Public -2) Private"; - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/BuildServer/SetupBuildScripts.cs b/src/GitVersion.Core/Configuration/Init/BuildServer/SetupBuildScripts.cs deleted file mode 100644 index 9cb9dc52c6..0000000000 --- a/src/GitVersion.Core/Configuration/Init/BuildServer/SetupBuildScripts.cs +++ /dev/null @@ -1,35 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.BuildServer; - -internal class SetupBuildScripts : ConfigInitWizardStep -{ - public SetupBuildScripts(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result) - { - case "0": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "1": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - } - return StepResult.Ok(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"What build server are you using? - -Want to see more? Contribute a pull request! - -0) Go Back -1) AppVeyor"; - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/EditConfigStep.cs b/src/GitVersion.Core/Configuration/Init/EditConfigStep.cs deleted file mode 100644 index 4ebc2962ed..0000000000 --- a/src/GitVersion.Core/Configuration/Init/EditConfigStep.cs +++ /dev/null @@ -1,63 +0,0 @@ -using GitVersion.Configuration.Init.BuildServer; -using GitVersion.Configuration.Init.SetConfig; -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init; - -public class EditConfigStep : ConfigInitWizardStep -{ - public EditConfigStep(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result) - { - case "0": - return StepResult.SaveAndExit(); - case "1": - return StepResult.ExitWithoutSaving(); - - case "2": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - - case "3": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - - case "4": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "5": - var editConfigStep = this.StepFactory.CreateStep(); - steps.Enqueue(this.StepFactory.CreateStep().WithData(editConfigStep, false)); - return StepResult.Ok(); - case "6": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "7": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - } - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => $@"Which would you like to change? - -0) Save changes and exit -1) Exit without saving - -2) Run getting started wizard - -3) Set next version number -4) Branch specific configuration -5) Branch Increment mode (per commit/after tag) (Current: {config.VersioningMode}) -6) Assembly versioning scheme (Current: {config.AssemblyVersioningScheme}) -7) Setup build scripts"; - - protected override string? DefaultResult => null; -} diff --git a/src/GitVersion.Core/Configuration/Init/GitVersionInitModule.cs b/src/GitVersion.Core/Configuration/Init/GitVersionInitModule.cs deleted file mode 100644 index 156fca30c7..0000000000 --- a/src/GitVersion.Core/Configuration/Init/GitVersionInitModule.cs +++ /dev/null @@ -1,20 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion.Configuration.Init; - -public class GitVersionInitModule : GitVersionModule -{ - public override void RegisterTypes(IServiceCollection services) - { - services.AddTransient(); - services.AddTransient(); - - var steps = FindAllDerivedTypes(Assembly.GetAssembly(GetType())); - - foreach (var step in steps) - { - services.AddTransient(step); - } - } -} diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/AssemblyVersioningSchemeSetting.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/AssemblyVersioningSchemeSetting.cs deleted file mode 100644 index df1ff061f6..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/AssemblyVersioningSchemeSetting.cs +++ /dev/null @@ -1,57 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.SetConfig; - -public class AssemblyVersioningSchemeSetting : ConfigInitWizardStep -{ - public AssemblyVersioningSchemeSetting(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - var editConfigStep = this.StepFactory.CreateStep(); - switch (result) - { - case "0": - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "1": - config.AssemblyVersioningScheme = AssemblyVersioningScheme.Major; - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "2": - config.AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinor; - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "3": - config.AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatch; - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "4": - config.AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag; - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - case "5": - config.AssemblyVersioningScheme = AssemblyVersioningScheme.None; - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"What assembly versioning scheme do you want to use: - -0) Go Back -1) Major.0.0.0 -2) Major.Minor.0.0 -3) Major.Minor.Patch.0 (default) -4) Major.Minor.Patch.TagCount (Allows different pre-release tags to cause assembly version to change) -5) None (skip's updating AssemblyVersion)"; - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranch.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranch.cs deleted file mode 100644 index 470257f4ba..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranch.cs +++ /dev/null @@ -1,48 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.SetConfig; - -public class ConfigureBranch : ConfigInitWizardStep -{ - private string name; - private BranchConfig branchConfig; - - public ConfigureBranch(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - public ConfigureBranch WithData(string configName, BranchConfig config) - { - this.branchConfig = config; - this.name = configName; - return this; - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result) - { - case "0": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "1": - steps.Enqueue(this.StepFactory.CreateStep().WithData(name, branchConfig)); - return StepResult.Ok(); - case "2": - steps.Enqueue(this.StepFactory.CreateStep().WithData(name, branchConfig)); - return StepResult.Ok(); - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => $@"What would you like to change for '{this.name}': - -0) Go Back -1) Branch Pre-release tag (Current: {this.branchConfig.Tag}) -2) Branch Increment mode (per commit/after tag) (Current: {this.branchConfig.VersioningMode})"; - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs deleted file mode 100644 index 4f95a3843f..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/ConfigureBranches.cs +++ /dev/null @@ -1,59 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.SetConfig; - -public class ConfigureBranches : ConfigInitWizardStep -{ - public ConfigureBranches(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - if (int.TryParse(result, out var parsed)) - { - if (parsed == 0) - { - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - } - - try - { - var foundBranch = OrderedBranches(config).ElementAt(parsed - 1); - var branchConfig = foundBranch.Value; - if (branchConfig == null) - { - branchConfig = new BranchConfig { Name = foundBranch.Key }; - config.Branches.Add(foundBranch.Key, branchConfig); - } - steps.Enqueue(this.StepFactory.CreateStep().WithData(foundBranch.Key, branchConfig)); - return StepResult.Ok(); - } - catch (ArgumentOutOfRangeException) - { } - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"Which branch would you like to configure: - -0) Go Back -" + string.Join(System.Environment.NewLine, OrderedBranches(config).Select((c, i) => $"{i + 1}) {c.Key}")); - - private static IOrderedEnumerable> OrderedBranches(Config config) - { - var defaultConfig = new ConfigurationBuilder().Build(); - - var defaultConfigurationBranches = defaultConfig.Branches - .Where(k => !config.Branches.ContainsKey(k.Key)) - // Return an empty branch config - .Select(v => new KeyValuePair(v.Key, new BranchConfig())); - return config.Branches.Union(defaultConfigurationBranches).OrderBy(b => b.Key); - } - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/GlobalModeSetting.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/GlobalModeSetting.cs deleted file mode 100644 index 97e33b2389..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/GlobalModeSetting.cs +++ /dev/null @@ -1,57 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; - -namespace GitVersion.Configuration.Init.SetConfig; - -public class GlobalModeSetting : ConfigInitWizardStep -{ - private ConfigInitWizardStep returnToStep; - private bool isPartOfWizard; - - protected GlobalModeSetting(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - public GlobalModeSetting WithData(ConfigInitWizardStep returnStep, bool isPartOfTheWizard) - { - this.returnToStep = returnStep; - this.isPartOfWizard = isPartOfTheWizard; - return this; - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result) - { - case "1": - config.VersioningMode = VersioningMode.ContinuousDelivery; - steps.Enqueue(this.returnToStep); - return StepResult.Ok(); - case "2": - config.VersioningMode = VersioningMode.ContinuousDeployment; - steps.Enqueue(this.returnToStep); - return StepResult.Ok(); - case "3": - config.VersioningMode = VersioningMode.Mainline; - steps.Enqueue(this.returnToStep); - return StepResult.Ok(); - case "0": - case "4": - steps.Enqueue(this.returnToStep); - return StepResult.Ok(); - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => $@"What do you want the default increment mode to be (can be overriden per branch): -{(!this.isPartOfWizard ? "0) Go Back" : string.Empty)} -1) Follow SemVer and only increment when a release has been tagged (continuous delivery mode) -2) Increment based on branch config every commit (continuous deployment mode) -3) Each merged branch against main will increment the version (mainline mode) -{(this.isPartOfWizard ? "4) Skip" : string.Empty)}"; - - protected override string DefaultResult => "4"; -} diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchIncrementMode.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchIncrementMode.cs deleted file mode 100644 index 21fdfa667d..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchIncrementMode.cs +++ /dev/null @@ -1,52 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Logging; -using GitVersion.Model.Configuration; -using GitVersion.VersionCalculation; - -namespace GitVersion.Configuration.Init.SetConfig; - -public class SetBranchIncrementMode : ConfigInitWizardStep -{ - private string name; - private BranchConfig branchConfig; - - public SetBranchIncrementMode(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - public SetBranchIncrementMode WithData(string configName, BranchConfig config) - { - this.branchConfig = config; - this.name = configName; - return this; - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - var configureBranchStep = this.StepFactory.CreateStep(); - switch (result) - { - case "0": - steps.Enqueue(configureBranchStep.WithData(this.name, this.branchConfig)); - return StepResult.Ok(); - case "1": - this.branchConfig.VersioningMode = VersioningMode.ContinuousDelivery; - steps.Enqueue(configureBranchStep.WithData(name, this.branchConfig)); - return StepResult.Ok(); - case "2": - this.branchConfig.VersioningMode = VersioningMode.ContinuousDeployment; - steps.Enqueue(configureBranchStep.WithData(name, this.branchConfig)); - return StepResult.Ok(); - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => $@"What do you want the increment mode for {this.name} to be? - -0) Go Back -1) Follow SemVer and only increment when a release has been tagged (continuous delivery mode) -2) Increment based on branch config every commit (continuous deployment mode)"; - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchTag.cs b/src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchTag.cs deleted file mode 100644 index 1025c8a207..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetConfig/SetBranchTag.cs +++ /dev/null @@ -1,56 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.SetConfig; - -public class SetBranchTag : ConfigInitWizardStep -{ - private string name; - private BranchConfig branchConfig; - - public SetBranchTag(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - public SetBranchTag WithData(string configName, BranchConfig config) - { - this.branchConfig = config; - this.name = configName; - return this; - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - if (result.IsNullOrWhiteSpace()) - { - return StepResult.InvalidResponseSelected(); - } - - var configureBranchStep = this.StepFactory.CreateStep(); - switch (result) - { - case "0": - steps.Enqueue(configureBranchStep.WithData(this.name, this.branchConfig)); - return StepResult.Ok(); - case "1": - this.branchConfig.Tag = string.Empty; - steps.Enqueue(configureBranchStep.WithData(name, this.branchConfig)); - return StepResult.Ok(); - default: - this.branchConfig.Tag = result; - steps.Enqueue(configureBranchStep.WithData(name, this.branchConfig)); - return StepResult.Ok(); - } - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"This sets the pre-release tag which will be used for versions on this branch (beta, rc etc) - -0) Go Back -1) No tag - -Anything else will be used as the tag"; - - protected override string DefaultResult => "0"; -} diff --git a/src/GitVersion.Core/Configuration/Init/SetNextVersion.cs b/src/GitVersion.Core/Configuration/Init/SetNextVersion.cs deleted file mode 100644 index f9fb5d1012..0000000000 --- a/src/GitVersion.Core/Configuration/Init/SetNextVersion.cs +++ /dev/null @@ -1,34 +0,0 @@ -using GitVersion.Configuration.Init.Wizard; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init; - -public class SetNextVersion : ConfigInitWizardStep -{ - public SetNextVersion(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - var editConfigStep = this.StepFactory.CreateStep(); - if (result.IsNullOrEmpty()) - { - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - } - - if (!SemanticVersion.TryParse(result, string.Empty, out var semVer)) - return StepResult.InvalidResponseSelected(); - - config.NextVersion = semVer.ToString("t"); - steps.Enqueue(editConfigStep); - return StepResult.Ok(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => "What would you like to set the next version to (enter nothing to cancel)?"; - - protected override string? DefaultResult => null; -} diff --git a/src/GitVersion.Core/Configuration/Init/StepResult.cs b/src/GitVersion.Core/Configuration/Init/StepResult.cs deleted file mode 100644 index b3cd1ea9ee..0000000000 --- a/src/GitVersion.Core/Configuration/Init/StepResult.cs +++ /dev/null @@ -1,31 +0,0 @@ -namespace GitVersion.Configuration.Init; - -public class StepResult -{ - private StepResult() { } - - public static StepResult Ok() => new(); - - public static StepResult InvalidResponseSelected() => new() - { - InvalidResponse = true - }; - - public static StepResult SaveAndExit() => new() - { - Save = true, - Exit = true - }; - - public static StepResult ExitWithoutSaving() => new() - { - Save = false, - Exit = true - }; - - public bool Exit { get; private set; } - - public bool Save { get; private set; } - - public bool InvalidResponse { get; private set; } -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitStepFactory.cs b/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitStepFactory.cs deleted file mode 100644 index f6414b5bce..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitStepFactory.cs +++ /dev/null @@ -1,17 +0,0 @@ -using GitVersion.Extensions; -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion.Configuration.Init.Wizard; - -public class ConfigInitStepFactory : IConfigInitStepFactory -{ - private readonly IServiceProvider sp; - - public ConfigInitStepFactory() - { - } - - public ConfigInitStepFactory(IServiceProvider sp) => this.sp = sp.NotNull(); - - public T CreateStep() where T : notnull => this.sp.GetRequiredService(); -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitWizard.cs b/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitWizard.cs deleted file mode 100644 index 08b8efe00a..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitWizard.cs +++ /dev/null @@ -1,35 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class ConfigInitWizard : IConfigInitWizard -{ - private readonly IConsole console; - private readonly IConfigInitStepFactory stepFactory; - - public ConfigInitWizard(IConsole console, IConfigInitStepFactory stepFactory) - { - this.console = console.NotNull(); - this.stepFactory = stepFactory.NotNull(); - } - - public Config? Run(Config config, string workingDirectory) - { - this.console.WriteLine("GitVersion init will guide you through setting GitVersion up to work for you"); - var steps = new Queue(); - steps.Enqueue(this.stepFactory.CreateStep()); - - while (steps.Count > 0) - { - var currentStep = steps.Dequeue(); - if (!currentStep.Apply(steps, config, workingDirectory)) - { - return null; - } - } - - return config; - } -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitWizardStep.cs b/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitWizardStep.cs deleted file mode 100644 index 80077e2d23..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/ConfigInitWizardStep.cs +++ /dev/null @@ -1,70 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public abstract class ConfigInitWizardStep -{ - protected readonly IConsole Console; - protected readonly IFileSystem FileSystem; - protected readonly ILog Log; - protected readonly IConfigInitStepFactory StepFactory; - - protected ConfigInitWizardStep(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) - { - this.Console = console.NotNull(); - this.FileSystem = fileSystem.NotNull(); - this.Log = log.NotNull(); - this.StepFactory = stepFactory.NotNull(); - } - - public bool Apply(Queue steps, Config config, string workingDirectory) - { - this.Console.WriteLine(); - this.Console.WriteLine(GetPrompt(config, workingDirectory)); - this.Console.WriteLine(); - this.Console.Write("> "); - var input = this.Console.ReadLine(); - if (input == null) - { - this.Console.WriteLine("Would you like to save changes? (y/n)"); - input = this.Console.ReadLine(); - if (input == null || input.ToLower() == "n") return false; - if (input.ToLower() == "y") - { - steps.Clear(); - return true; - } - - InvalidResponse(steps); - return true; - } - var resultWithDefaultApplied = input.IsNullOrEmpty() ? DefaultResult : input; - var stepResult = HandleResult(resultWithDefaultApplied, steps, config, workingDirectory); - if (stepResult.InvalidResponse) - { - InvalidResponse(steps); - } - else if (stepResult.Exit) - { - steps.Clear(); - return stepResult.Save; - } - return true; - } - - private void InvalidResponse(Queue steps) - { - this.Console.WriteLine(); - using (this.Console.UseColor(ConsoleColor.Red)) - { - this.Console.WriteLine("Invalid response!"); - } - steps.Enqueue(this); - } - - protected abstract StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory); - protected abstract string GetPrompt(Config config, string workingDirectory); - protected abstract string? DefaultResult { get; } -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/FinishedSetupStep.cs b/src/GitVersion.Core/Configuration/Init/Wizard/FinishedSetupStep.cs deleted file mode 100644 index 185c903125..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/FinishedSetupStep.cs +++ /dev/null @@ -1,13 +0,0 @@ -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class FinishedSetupStep : EditConfigStep -{ - public FinishedSetupStep(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override string GetPrompt(Config config, string workingDirectory) => $"Questions are all done, you can now edit GitVersion's configuration further{System.Environment.NewLine}" + base.GetPrompt(config, workingDirectory); -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/GitFlowSetupStep.cs b/src/GitVersion.Core/Configuration/Init/Wizard/GitFlowSetupStep.cs deleted file mode 100644 index 4df17baa97..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/GitFlowSetupStep.cs +++ /dev/null @@ -1,15 +0,0 @@ -using GitVersion.Configuration.Init.SetConfig; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class GitFlowSetupStep : GlobalModeSetting -{ - public GitFlowSetupStep(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override string GetPrompt(Config config, string workingDirectory) => $"By default GitVersion will only increment the version of the 'develop' branch every commit, all other branches will increment when tagged{System.Environment.NewLine}{System.Environment.NewLine}" + - base.GetPrompt(config, workingDirectory); -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/GitHubFlowStep.cs b/src/GitVersion.Core/Configuration/Init/Wizard/GitHubFlowStep.cs deleted file mode 100644 index e0ea2bc4b5..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/GitHubFlowStep.cs +++ /dev/null @@ -1,14 +0,0 @@ -using GitVersion.Configuration.Init.SetConfig; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class GitHubFlowStep : GlobalModeSetting -{ - public GitHubFlowStep(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override string GetPrompt(Config config, string workingDirectory) => $"By default GitVersion will only increment the version when tagged{System.Environment.NewLine}{System.Environment.NewLine}" + base.GetPrompt(config, workingDirectory); -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/IConfigInitStepFactory.cs b/src/GitVersion.Core/Configuration/Init/Wizard/IConfigInitStepFactory.cs deleted file mode 100644 index e5d249d61e..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/IConfigInitStepFactory.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace GitVersion.Configuration.Init.Wizard; - -public interface IConfigInitStepFactory -{ - T CreateStep() where T : notnull; -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/IConfigInitWizard.cs b/src/GitVersion.Core/Configuration/Init/Wizard/IConfigInitWizard.cs deleted file mode 100644 index 54c67cf81d..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/IConfigInitWizard.cs +++ /dev/null @@ -1,8 +0,0 @@ -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public interface IConfigInitWizard -{ - Config? Run(Config config, string workingDirectory); -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy1Step.cs b/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy1Step.cs deleted file mode 100644 index 4cef9bcc14..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy1Step.cs +++ /dev/null @@ -1,35 +0,0 @@ -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class PickBranchingStrategy1Step : ConfigInitWizardStep -{ - public PickBranchingStrategy1Step(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result?.ToLower()) - { - case "y": - this.Console.Write(@"Because you need to maintain multiple versions of your product in production at the same time, GitFlow is likely a good fit. - -GitFlow allows you to have new development happening on the 'develop' branch, patch issues in old minor versions with 'hotfix/' branches and support old major versions with 'support/' branches"); - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "n": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"GitVersion can try to recommend you a branching strategy based on a few questions. - -Do you need to maintain multiple versions of your application simultaneously in production? (y/n)"; - - protected override string? DefaultResult => null; -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy2Step.cs b/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy2Step.cs deleted file mode 100644 index 0ad218e2a6..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy2Step.cs +++ /dev/null @@ -1,36 +0,0 @@ -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class PickBranchingStrategy2Step : ConfigInitWizardStep -{ - public PickBranchingStrategy2Step(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result?.ToLower()) - { - case "y": - this.Console.WriteLine("GitFlow is likely a good fit, the 'develop' branch can be used " + - "for active development while stabilising the next release."); - this.Console.WriteLine(); - this.Console.WriteLine("GitHubFlow is designed for a lightweight workflow where main is always " + - "good to deploy to production and feature branches are used to stabilise " + - "features, once stable they are merged to main and made available in the next release"); - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - case "n": - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - } - - return StepResult.InvalidResponseSelected(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => "Do you stabilise releases while continuing work on the next version? (y/n)"; - - protected override string? DefaultResult => null; -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy3Step.cs b/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy3Step.cs deleted file mode 100644 index e42c540bc2..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategy3Step.cs +++ /dev/null @@ -1,37 +0,0 @@ -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class PickBranchingStrategy3Step : ConfigInitWizardStep -{ - public PickBranchingStrategy3Step(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - switch (result?.ToLower()) - { - case "y": - this.Console.WriteLine("GitFlow could be a better fit than GitHubFlow for you."); - this.Console.WriteLine(); - this.Console.WriteLine("GitVersion increments the SemVer for each commit on the develop branch by default, " + - "this means all packages built from develop can be published to a single NuGet feed."); - break; - case "n": - this.Console.WriteLine("We recommend the GitHubFlow branching strategy, it sounds like you will " + - "not benefit from the additional complexity that GitFlow introduces"); - break; - default: - return StepResult.InvalidResponseSelected(); - } - - steps.Enqueue(this.StepFactory.CreateStep()); - return StepResult.Ok(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => "Do you need to build nightly or consume packages the CI build creates without releasing those versions? (y/n)"; - - protected override string? DefaultResult => null; -} diff --git a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategyStep.cs b/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategyStep.cs deleted file mode 100644 index 458b75d6c9..0000000000 --- a/src/GitVersion.Core/Configuration/Init/Wizard/PickBranchingStrategyStep.cs +++ /dev/null @@ -1,40 +0,0 @@ -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.Configuration.Init.Wizard; - -public class PickBranchingStrategyStep : ConfigInitWizardStep -{ - public PickBranchingStrategyStep(IConsole console, IFileSystem fileSystem, ILog log, IConfigInitStepFactory stepFactory) : base(console, fileSystem, log, stepFactory) - { - } - - protected override StepResult HandleResult(string? result, Queue steps, Config config, string workingDirectory) - { - var returnToStep = this.StepFactory.CreateStep(); - switch (result) - { - case "1": - steps.Enqueue(this.StepFactory.CreateStep().WithData(returnToStep, true)); - break; - case "2": - steps.Enqueue(this.StepFactory.CreateStep().WithData(returnToStep, true)); - break; - case "3": - steps.Enqueue(this.StepFactory.CreateStep()); - break; - default: - return StepResult.InvalidResponseSelected(); - } - - return StepResult.Ok(); - } - - protected override string GetPrompt(Config config, string workingDirectory) => @"The way you will use GitVersion will change a lot based on your branching strategy. What branching strategy will you be using: - -1) GitFlow (or similar) -2) GitHubFlow -3) Unsure, tell me more"; - - protected override string? DefaultResult => null; -} diff --git a/src/GitVersion.Core/Configuration/ReferenceNameExtensions.cs b/src/GitVersion.Core/Configuration/ReferenceNameExtensions.cs new file mode 100644 index 0000000000..dd05cab0f2 --- /dev/null +++ b/src/GitVersion.Core/Configuration/ReferenceNameExtensions.cs @@ -0,0 +1,14 @@ +using GitVersion.Git; + +namespace GitVersion.Configuration; + +public static class ReferenceNameExtensions +{ + public static bool TryGetSemanticVersion( + this ReferenceName source, out (SemanticVersion Value, string? Name) result, IGitVersionConfiguration configuration) + => source.TryGetSemanticVersion(out result, configuration.VersionInBranchRegex, configuration.TagPrefix, configuration.SemanticVersionFormat); + + public static bool TryGetSemanticVersion( + this ReferenceName source, out (SemanticVersion Value, string? Name) result, EffectiveConfiguration configuration) + => source.TryGetSemanticVersion(out result, configuration.VersionInBranchRegex, configuration.TagPrefix, configuration.SemanticVersionFormat); +} diff --git a/src/GitVersion.Core/Core/Abstractions/IFileSystem.cs b/src/GitVersion.Core/Core/Abstractions/IFileSystem.cs index b316a76f7e..32e4646809 100644 --- a/src/GitVersion.Core/Core/Abstractions/IFileSystem.cs +++ b/src/GitVersion.Core/Core/Abstractions/IFileSystem.cs @@ -15,6 +15,4 @@ public interface IFileSystem void CreateDirectory(string path); bool DirectoryExists(string path); long GetLastDirectoryWrite(string path); - - bool PathsEqual(string? path, string? otherPath); } diff --git a/src/GitVersion.Core/Core/Abstractions/IGitPreparer.cs b/src/GitVersion.Core/Core/Abstractions/IGitPreparer.cs index 8fede694f1..8e47f43328 100644 --- a/src/GitVersion.Core/Core/Abstractions/IGitPreparer.cs +++ b/src/GitVersion.Core/Core/Abstractions/IGitPreparer.cs @@ -1,3 +1,5 @@ +using GitVersion.Git; + namespace GitVersion; public interface IGitPreparer diff --git a/src/GitVersion.Core/Core/Abstractions/IGitVersionCalculateTool.cs b/src/GitVersion.Core/Core/Abstractions/IGitVersionCalculateTool.cs index 94f2e5c1d0..24c86e9428 100644 --- a/src/GitVersion.Core/Core/Abstractions/IGitVersionCalculateTool.cs +++ b/src/GitVersion.Core/Core/Abstractions/IGitVersionCalculateTool.cs @@ -4,5 +4,5 @@ namespace GitVersion; public interface IGitVersionCalculateTool { - VersionVariables CalculateVersionVariables(); + GitVersionVariables CalculateVersionVariables(); } diff --git a/src/GitVersion.Core/Core/Abstractions/IGitVersionModule.cs b/src/GitVersion.Core/Core/Abstractions/IGitVersionModule.cs index e1461d9fc2..0d8e217a35 100644 --- a/src/GitVersion.Core/Core/Abstractions/IGitVersionModule.cs +++ b/src/GitVersion.Core/Core/Abstractions/IGitVersionModule.cs @@ -1,3 +1,4 @@ +using GitVersion.Extensions; using Microsoft.Extensions.DependencyInjection; namespace GitVersion; @@ -5,4 +6,12 @@ namespace GitVersion; public interface IGitVersionModule { void RegisterTypes(IServiceCollection services); + + static IEnumerable FindAllDerivedTypes(Assembly? assembly) + { + assembly.NotNull(); + + var derivedType = typeof(T); + return assembly.GetTypes().Where(t => t != derivedType && derivedType.IsAssignableFrom(t)); + } } diff --git a/src/GitVersion.Core/Core/Abstractions/IGitVersionOutputTool.cs b/src/GitVersion.Core/Core/Abstractions/IGitVersionOutputTool.cs deleted file mode 100644 index a20f5a9ecf..0000000000 --- a/src/GitVersion.Core/Core/Abstractions/IGitVersionOutputTool.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GitVersion.OutputVariables; - -namespace GitVersion; - -public interface IGitVersionOutputTool -{ - void OutputVariables(VersionVariables variables, bool updateBuildNumber); - void UpdateAssemblyInfo(VersionVariables variables); - void UpdateWixVersionFile(VersionVariables variables); - void GenerateGitVersionInformation(VersionVariables variables, FileWriteInfo fileWriteInfo); -} diff --git a/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs index 3644ba26b9..803b9a123c 100644 --- a/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs +++ b/src/GitVersion.Core/Core/Abstractions/IRepositoryStore.cs @@ -1,4 +1,5 @@ -using GitVersion.Model.Configuration; +using GitVersion.Configuration; +using GitVersion.Git; namespace GitVersion.Common; @@ -10,32 +11,31 @@ public interface IRepositoryStore ICommit? FindMergeBase(IBranch? branch, IBranch? otherBranch); ICommit? FindMergeBase(ICommit commit, ICommit mainlineTip); - ICommit? GetCurrentCommit(IBranch currentBranch, string? commitId); - ICommit GetBaseVersionSource(ICommit currentBranchTip); - IEnumerable GetMainlineCommitLog(ICommit? baseVersionSource, ICommit? mainlineTip); - IEnumerable GetMergeBaseCommits(ICommit? mergeCommit, ICommit? mergedHead, ICommit? findMergeBase); - IEnumerable GetCommitLog(ICommit? baseVersionSource, ICommit? currentCommit); + + ICommit? GetCurrentCommit(IBranch currentBranch, string? commitId, IIgnoreConfiguration ignore); + + IReadOnlyList GetCommitLog(ICommit? baseVersionSource, ICommit currentCommit, IIgnoreConfiguration ignore); IBranch GetTargetBranch(string? targetBranchName); - IBranch? FindBranch(string? branchName); - IBranch? FindMainBranch(Config configuration); - IBranch? GetChosenBranch(Config configuration); - IEnumerable GetBranchesForCommit(ICommit commit); - IEnumerable GetExcludedInheritBranches(Config configuration); - IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig); + IBranch? FindBranch(ReferenceName branchName); + IBranch? FindBranch(string branchName); + IEnumerable ExcludingBranches(IEnumerable branchesToExclude); - IEnumerable GetBranchesContainingCommit(ICommit? commit, IEnumerable? branches = null, bool onlyTrackedBranches = false); - IDictionary> GetMainlineBranches(ICommit commit, Config configuration, IEnumerable>? mainlineBranchConfigs); + IEnumerable GetBranchesContainingCommit(ICommit commit, IEnumerable? branches = null, bool onlyTrackedBranches = false); /// /// Find the commit where the given branch was branched from another branch. /// If there are multiple such commits and branches, tries to guess based on commit histories. /// - BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, Config configuration, params IBranch[] excludedBranches); + BranchCommit FindCommitBranchBranchedFrom(IBranch? branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches); + + IEnumerable FindCommitBranchesBranchedFrom(IBranch branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches); + + IEnumerable FindCommitBranchesBranchedFrom(IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches); + + IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches); - SemanticVersion GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, bool handleDetachedBranch); - IEnumerable GetVersionTagsOnBranch(IBranch branch, string? tagPrefixRegex); - IEnumerable<(ITag Tag, SemanticVersion Semver, ICommit Commit)> GetValidVersionTags(string? tagPrefixRegex, DateTimeOffset? olderThan = null); + IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches); bool IsCommitOnBranch(ICommit? baseVersionSource, IBranch branch, ICommit firstMatchingCommit); diff --git a/src/GitVersion.Core/Core/BranchRepository.cs b/src/GitVersion.Core/Core/BranchRepository.cs new file mode 100644 index 0000000000..731e12fe23 --- /dev/null +++ b/src/GitVersion.Core/Core/BranchRepository.cs @@ -0,0 +1,34 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.Core; + +internal sealed class BranchRepository(IGitRepository gitRepository) : IBranchRepository +{ + private readonly IGitRepository gitRepository = gitRepository.NotNull(); + + public IEnumerable GetMainBranches(IGitVersionConfiguration configuration, params IBranch[] excludeBranches) + => GetBranches(configuration, [.. excludeBranches], branchConfiguration => branchConfiguration.IsMainBranch == true); + + public IEnumerable GetReleaseBranches(IGitVersionConfiguration configuration, params IBranch[] excludeBranches) + => GetBranches(configuration, [.. excludeBranches], branchConfiguration => branchConfiguration.IsReleaseBranch == true); + + private IEnumerable GetBranches( + IGitVersionConfiguration configuration, HashSet excludeBranches, Func predicate) + { + predicate.NotNull(); + + foreach (var branch in this.gitRepository.Branches) + { + if (!excludeBranches.Contains(branch)) + { + var branchConfiguration = configuration.GetBranchConfiguration(branch.Name); + if (predicate(branchConfiguration)) + { + yield return branch; + } + } + } + } +} diff --git a/src/GitVersion.Core/Core/BranchesContainingCommitFinder.cs b/src/GitVersion.Core/Core/BranchesContainingCommitFinder.cs index 1c4c74a1e4..bc2934fa2b 100644 --- a/src/GitVersion.Core/Core/BranchesContainingCommitFinder.cs +++ b/src/GitVersion.Core/Core/BranchesContainingCommitFinder.cs @@ -1,23 +1,18 @@ using GitVersion.Extensions; +using GitVersion.Git; using GitVersion.Logging; namespace GitVersion; -internal class BranchesContainingCommitFinder +internal class BranchesContainingCommitFinder(IGitRepository repository, ILog log) { - private readonly ILog log; - private readonly IGitRepository repository; + private readonly ILog log = log.NotNull(); + private readonly IGitRepository repository = repository.NotNull(); - public BranchesContainingCommitFinder(IGitRepository repository, ILog log) + public IEnumerable GetBranchesContainingCommit(ICommit commit, IEnumerable? branches = null, bool onlyTrackedBranches = false) { - this.repository = repository.NotNull(); - this.log = log.NotNull(); - } - - public IEnumerable GetBranchesContainingCommit(ICommit? commit, IEnumerable? branches = null, bool onlyTrackedBranches = false) - { - commit = commit.NotNull(); - branches ??= this.repository.Branches.ToList(); + commit.NotNull(); + branches ??= [.. this.repository.Branches]; // TODO Should we cache this? // Yielding part is split from the main part of the method to avoid having the exception check performed lazily. @@ -73,7 +68,7 @@ private IEnumerable GetCommitsReacheableFrom(IGitObject commit, IBranch } private static bool IncludeTrackedBranches(IBranch branch, bool includeOnlyTracked) - => includeOnlyTracked && branch.IsTracking || !includeOnlyTracked; + => (includeOnlyTracked && branch.IsTracking) || !includeOnlyTracked; private static bool BranchTipIsNullOrCommit(IBranch branch, IGitObject commit) => branch.Tip == null || branch.Tip.Sha == commit.Sha; diff --git a/src/GitVersion.Core/Core/EffectiveConfigurationExtensions.cs b/src/GitVersion.Core/Core/EffectiveConfigurationExtensions.cs new file mode 100644 index 0000000000..c6a7efb553 --- /dev/null +++ b/src/GitVersion.Core/Core/EffectiveConfigurationExtensions.cs @@ -0,0 +1,30 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.Core; + +internal static class EffectiveConfigurationExtensions +{ + public static TaggedSemanticVersions GetTaggedSemanticVersion(this EffectiveConfiguration effectiveConfiguration) + { + effectiveConfiguration.NotNull(); + + TaggedSemanticVersions taggedSemanticVersion = TaggedSemanticVersions.OfBranch; + + if (effectiveConfiguration.TrackMergeTarget) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfMergeTargets; + } + + if (effectiveConfiguration.TracksReleaseBranches) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfReleaseBranches; + } + + if (!effectiveConfiguration.IsMainBranch && !effectiveConfiguration.IsReleaseBranch) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfMainBranches; + } + return taggedSemanticVersion; + } +} diff --git a/src/GitVersion.Core/Core/Environment.cs b/src/GitVersion.Core/Core/Environment.cs index 7e9200007a..cc4c99c192 100644 --- a/src/GitVersion.Core/Core/Environment.cs +++ b/src/GitVersion.Core/Core/Environment.cs @@ -1,8 +1,8 @@ namespace GitVersion; -public class Environment : IEnvironment +internal class Environment : IEnvironment { - public string? GetEnvironmentVariable(string variableName) => System.Environment.GetEnvironmentVariable(variableName); + public string? GetEnvironmentVariable(string variableName) => SysEnv.GetEnvironmentVariable(variableName); - public void SetEnvironmentVariable(string variableName, string? value) => System.Environment.SetEnvironmentVariable(variableName, value); + public void SetEnvironmentVariable(string variableName, string? value) => SysEnv.SetEnvironmentVariable(variableName, value); } diff --git a/src/GitVersion.Core/Core/Exceptions/BugException.cs b/src/GitVersion.Core/Core/Exceptions/BugException.cs new file mode 100644 index 0000000000..ba231b96eb --- /dev/null +++ b/src/GitVersion.Core/Core/Exceptions/BugException.cs @@ -0,0 +1,16 @@ +namespace GitVersion; + +public class BugException : Exception +{ + public BugException(string message) : base(message) + { + } + + public BugException() + { + } + + public BugException(string? message, Exception? innerException) : base(message, innerException) + { + } +} diff --git a/src/GitVersion.Core/Model/Exceptions/GitVersionException.cs b/src/GitVersion.Core/Core/Exceptions/GitVersionException.cs similarity index 53% rename from src/GitVersion.Core/Model/Exceptions/GitVersionException.cs rename to src/GitVersion.Core/Core/Exceptions/GitVersionException.cs index cd74c8f98f..3fc07f140b 100644 --- a/src/GitVersion.Core/Model/Exceptions/GitVersionException.cs +++ b/src/GitVersion.Core/Core/Exceptions/GitVersionException.cs @@ -1,16 +1,23 @@ namespace GitVersion; [Serializable] -public class GitVersionException : GitToolsException +public class GitVersionException : Exception { + public GitVersionException() + { + } + public GitVersionException(string message) : base(message) { } - public GitVersionException(string message, Exception innerException) : base(message, innerException) { } + + public GitVersionException(string messageFormat, params object[] args) : base(string.Format(messageFormat, args)) + { + } } diff --git a/src/GitVersion.Core/Core/Exceptions/LockedFileException.cs b/src/GitVersion.Core/Core/Exceptions/LockedFileException.cs new file mode 100644 index 0000000000..3cef30a364 --- /dev/null +++ b/src/GitVersion.Core/Core/Exceptions/LockedFileException.cs @@ -0,0 +1,20 @@ +namespace GitVersion; + +public class LockedFileException : Exception +{ + public LockedFileException(Exception inner) : base(inner.Message, inner) + { + } + + public LockedFileException() + { + } + + public LockedFileException(string? message) : base(message) + { + } + + public LockedFileException(string? message, Exception? innerException) : base(message, innerException) + { + } +} diff --git a/src/GitVersion.Core/Model/Exceptions/WarningException.cs b/src/GitVersion.Core/Core/Exceptions/WarningException.cs similarity index 50% rename from src/GitVersion.Core/Model/Exceptions/WarningException.cs rename to src/GitVersion.Core/Core/Exceptions/WarningException.cs index 4c40ff9eca..eae03f9071 100644 --- a/src/GitVersion.Core/Model/Exceptions/WarningException.cs +++ b/src/GitVersion.Core/Core/Exceptions/WarningException.cs @@ -7,4 +7,12 @@ public WarningException(string message) : base(message) { } + + public WarningException() + { + } + + public WarningException(string? message, Exception? innerException) : base(message, innerException) + { + } } diff --git a/src/GitVersion.Core/Core/FileSystem.cs b/src/GitVersion.Core/Core/FileSystem.cs index d8eb0b3175..d3c41b59ea 100644 --- a/src/GitVersion.Core/Core/FileSystem.cs +++ b/src/GitVersion.Core/Core/FileSystem.cs @@ -2,7 +2,7 @@ namespace GitVersion; -public class FileSystem : IFileSystem +internal class FileSystem : IFileSystem { public void Copy(string from, string to, bool overwrite) => File.Copy(from, to, overwrite); @@ -52,10 +52,4 @@ public IEnumerable DirectoryEnumerateFiles(string? directory, string sea .DefaultIfEmpty() .Max() .Ticks; - - public bool PathsEqual(string? path, string? otherPath) => - string.Equals( - PathHelper.GetFullPath(path).TrimEnd('\\').TrimEnd('/'), - PathHelper.GetFullPath(otherPath).TrimEnd('\\').TrimEnd('/'), - StringComparerUtils.OsDependentComparison); } diff --git a/src/GitVersion.Core/Core/GitPreparer.cs b/src/GitVersion.Core/Core/GitPreparer.cs index 47436d041a..e33d236d4d 100644 --- a/src/GitVersion.Core/Core/GitPreparer.cs +++ b/src/GitVersion.Core/Core/GitPreparer.cs @@ -1,36 +1,33 @@ -using GitVersion.BuildAgents; +using GitVersion.Agents; +using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Git; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model.Configuration; using Microsoft.Extensions.Options; namespace GitVersion; -public class GitPreparer : IGitPreparer +internal class GitPreparer( + ILog log, + IEnvironment environment, + ICurrentBuildAgent buildAgent, + IOptions options, + IMutatingGitRepository repository, + IGitRepositoryInfo repositoryInfo, + Lazy versionContext) + : IGitPreparer { - private readonly ILog log; - private readonly IEnvironment environment; - private readonly IMutatingGitRepository repository; - private readonly IOptions options; - private readonly IGitRepositoryInfo repositoryInfo; - private readonly ICurrentBuildAgent buildAgent; - private readonly RetryAction retryAction; - private readonly Lazy versionContext; - private const string DefaultRemoteName = "origin"; + private readonly ILog log = log.NotNull(); + private readonly IEnvironment environment = environment.NotNull(); + private readonly IMutatingGitRepository repository = repository.NotNull(); + private readonly IOptions options = options.NotNull(); + private readonly IGitRepositoryInfo repositoryInfo = repositoryInfo.NotNull(); + private readonly ICurrentBuildAgent buildAgent = buildAgent.NotNull(); + private readonly RetryAction retryAction = new(); + private readonly Lazy versionContext = versionContext.NotNull(); - public GitPreparer(ILog log, IEnvironment environment, ICurrentBuildAgent buildAgent, IOptions options, - IMutatingGitRepository repository, IGitRepositoryInfo repositoryInfo, Lazy versionContext) - { - this.log = log.NotNull(); - this.environment = environment.NotNull(); - this.repository = repository.NotNull(); - this.options = options.NotNull(); - this.repositoryInfo = repositoryInfo.NotNull(); - this.buildAgent = buildAgent.NotNull(); - this.retryAction = new RetryAction(); - this.versionContext = versionContext.NotNull(); - } + private const string DefaultRemoteName = "origin"; public void Prepare() { @@ -42,7 +39,7 @@ public void Prepare() this.log.Info($"DotGit directory is: {dotGitDirectory}"); if (dotGitDirectory.IsNullOrEmpty() || projectRoot.IsNullOrEmpty()) { - throw new Exception($"Failed to prepare or find the .git directory in path '{gitVersionOptions.WorkingDirectory}'."); + throw new($"Failed to prepare or find the .git directory in path '{gitVersionOptions.WorkingDirectory}'."); } PrepareInternal(gitVersionOptions); @@ -106,7 +103,7 @@ private void CreateDynamicRepository(string? targetBranch) { if (targetBranch.IsNullOrWhiteSpace()) { - throw new Exception("Dynamic Git repositories must have a target branch (/b)"); + throw new("Dynamic Git repositories must have a target branch (/b)"); } var gitDirectory = this.repositoryInfo.DynamicGitRepositoryPath; @@ -114,7 +111,7 @@ private void CreateDynamicRepository(string? targetBranch) using (this.log.IndentLog($"Creating dynamic repository at '{gitDirectory}'")) { var gitVersionOptions = this.options.Value; - var authentication = gitVersionOptions.Authentication; + var authentication = gitVersionOptions.AuthenticationInfo; if (!Directory.Exists(gitDirectory)) { CloneRepository(gitVersionOptions.RepositoryInfo.TargetUrl, gitDirectory, authentication); @@ -151,52 +148,59 @@ private void CloneRepository(string? repositoryUrl, string? gitDirectory, Authen /// private void NormalizeGitDirectory(bool noFetch, string? currentBranchName, bool isDynamicRepository) { - var authentication = this.options.Value.Authentication; + var authentication = this.options.Value.AuthenticationInfo; // Need to ensure the HEAD does not move, this is essentially a BugCheck var expectedSha = this.repository.Head.Tip?.Sha; var expectedBranchName = this.repository.Head.Name.Canonical; - try + var remote = EnsureOnlyOneRemoteIsDefined(); + EnsureRepositoryHeadDuringNormalisation(nameof(EnsureOnlyOneRemoteIsDefined), expectedSha); + FetchRemotesIfRequired(remote, noFetch, authentication); + EnsureRepositoryHeadDuringNormalisation(nameof(FetchRemotesIfRequired), expectedSha); + EnsureLocalBranchExistsForCurrentBranch(remote, currentBranchName); + EnsureRepositoryHeadDuringNormalisation(nameof(EnsureLocalBranchExistsForCurrentBranch), expectedSha); + CreateOrUpdateLocalBranchesFromRemoteTrackingOnes(remote.Name); + EnsureRepositoryHeadDuringNormalisation(nameof(CreateOrUpdateLocalBranchesFromRemoteTrackingOnes), expectedSha); + + var currentBranch = this.repository.Branches.FirstOrDefault(x => x.Name.EquivalentTo(currentBranchName)); + // Bug fix for https://github.com/GitTools/GitVersion/issues/1754, head maybe have been changed + // if this is a dynamic repository. But only allow this in case the branches are different (branch switch) + if (expectedSha != this.repository.Head.Tip?.Sha) { - var remote = EnsureOnlyOneRemoteIsDefined(); - - FetchRemotesIfRequired(remote, noFetch, authentication); - EnsureLocalBranchExistsForCurrentBranch(remote, currentBranchName); - CreateOrUpdateLocalBranchesFromRemoteTrackingOnes(remote.Name); - - var currentBranch = this.repository.Branches.FirstOrDefault(x => x.Name.EquivalentTo(currentBranchName)); - // Bug fix for https://github.com/GitTools/GitVersion/issues/1754, head maybe have been changed - // if this is a dynamic repository. But only allow this in case the branches are different (branch switch) - if (expectedSha != this.repository.Head.Tip?.Sha) + if (isDynamicRepository || currentBranch is null || !this.repository.Head.Equals(currentBranch)) { - if (isDynamicRepository || currentBranch is null || !this.repository.Head.Equals(currentBranch)) - { - var newExpectedSha = this.repository.Head.Tip?.Sha; - var newExpectedBranchName = this.repository.Head.Name.Canonical; + var newExpectedSha = this.repository.Head.Tip?.Sha; + var newExpectedBranchName = this.repository.Head.Name.Canonical; - this.log.Info($"Head has moved from '{expectedBranchName} | {expectedSha}' => '{newExpectedBranchName} | {newExpectedSha}', allowed since this is a dynamic repository"); + this.log.Info($"Head has moved from '{expectedBranchName} | {expectedSha}' => '{newExpectedBranchName} | {newExpectedSha}', allowed since this is a dynamic repository"); - expectedSha = newExpectedSha; - } + expectedSha = newExpectedSha; } - - EnsureHeadIsAttachedToBranch(currentBranchName, authentication); } - finally + + EnsureHeadIsAttachedToBranch(currentBranchName, authentication); + EnsureRepositoryHeadDuringNormalisation(nameof(EnsureHeadIsAttachedToBranch), expectedSha); + + if (this.repository.IsShallow) { - if (this.repository.Head.Tip?.Sha != expectedSha) - { - if (this.environment.GetEnvironmentVariable("IGNORE_NORMALISATION_GIT_HEAD_MOVE") != "1") - { - // Whoa, HEAD has moved, it shouldn't have. We need to blow up because there is a bug in normalisation - throw new BugException($@"GitVersion has a bug, your HEAD has moved after repo normalisation. + throw new WarningException("Repository is a shallow clone. Git repositories must contain the full history. See https://gitversion.net/docs/reference/requirements#unshallow for more info."); + } + } -To disable this error set an environmental variable called IGNORE_NORMALISATION_GIT_HEAD_MOVE to 1 + private void EnsureRepositoryHeadDuringNormalisation(string occasion, string? expectedSha) + { + expectedSha.NotNull(); + if (this.repository.Head.Tip?.Sha == expectedSha) + return; + + if (this.environment.GetEnvironmentVariable("IGNORE_NORMALISATION_GIT_HEAD_MOVE") == "1") + return; + // Whoa, HEAD has moved, it shouldn't have. We need to blow up because there is a bug in normalisation + throw new BugException($@" +GitVersion has a bug, your HEAD has moved after repo normalisation after step '{occasion}' +To disable this error set an environmental variable called IGNORE_NORMALISATION_GIT_HEAD_MOVE to 1 Please run `git {GitExtensions.CreateGitLogArgs(100)}` and submit it along with your build log (with personal info removed) in a new issue at https://github.com/GitTools/GitVersion"); - } - } - } } private void EnsureHeadIsAttachedToBranch(string? currentBranchName, AuthenticationInfo authentication) @@ -210,7 +214,7 @@ private void EnsureHeadIsAttachedToBranch(string? currentBranchName, Authenticat this.log.Info($"HEAD is detached and points at commit '{headSha}'."); var localRefs = this.repository.Refs.FromGlob("*").Select(r => $"{r.Name.Canonical} ({r.TargetIdentifier})"); - this.log.Info($"Local Refs:{System.Environment.NewLine}" + string.Join(System.Environment.NewLine, localRefs)); + this.log.Info($"Local Refs:{PathHelper.NewLine}" + string.Join(PathHelper.NewLine, localRefs)); // In order to decide whether a fake branch is required or not, first check to see if any local branches have the same commit SHA of the head SHA. // If they do, go ahead and checkout that branch @@ -250,11 +254,11 @@ private void ChooseLocalBranchToAttach(string? headSha, IReadOnlyCollection n.Name.EquivalentTo(Config.MainBranchKey)); + var mainBranch = localBranches.SingleOrDefault(n => n.Name.EquivalentTo(ConfigurationConstants.MainBranchKey)); if (mainBranch != null) { this.log.Warning("Because one of the branches is 'main', will build main." + moveBranchMsg); - Checkout(Config.MainBranchKey); + Checkout(ConfigurationConstants.MainBranchKey); } else { @@ -271,6 +275,7 @@ private void ChooseLocalBranchToAttach(string? headSha, IReadOnlyCollection r.Specification)); this.log.Info($"Fetching from remote '{remote.Name}' using the following refspecs: {refSpecs}."); - this.retryAction.Execute(() => this.repository.Fetch(remote.Name, Enumerable.Empty(), authentication, null)); + this.retryAction.Execute(() => this.repository.Fetch(remote.Name, [], authentication, null)); } } @@ -320,7 +325,7 @@ private void CreateOrUpdateLocalBranchesFromRemoteTrackingOnes(string remoteName foreach (var remoteTrackingReference in remoteTrackingReferences) { var remoteTrackingReferenceName = remoteTrackingReference.Name.Canonical; - var branchName = remoteTrackingReferenceName.Substring(prefix.Length); + var branchName = remoteTrackingReferenceName[prefix.Length..]; var localReferenceName = ReferenceName.FromBranchName(branchName); // We do not want to touch our current branch @@ -354,19 +359,19 @@ private void CreateOrUpdateLocalBranchesFromRemoteTrackingOnes(string remoteName } } - public void EnsureLocalBranchExistsForCurrentBranch(IRemote? remote, string? currentBranch) + public void EnsureLocalBranchExistsForCurrentBranch(IRemote remote, string? currentBranch) { remote.NotNull(); if (currentBranch.IsNullOrEmpty()) return; - var isRef = currentBranch.Contains("refs"); - var isBranch = currentBranch.Contains("refs/heads"); - var localCanonicalName = !isRef - ? "refs/heads/" + currentBranch - : isBranch + var referencePrefix = "refs/"; + var isLocalBranch = currentBranch.StartsWith(ReferenceName.LocalBranchPrefix); + var localCanonicalName = !currentBranch.StartsWith(referencePrefix) + ? ReferenceName.LocalBranchPrefix + currentBranch + : isLocalBranch ? currentBranch - : currentBranch.Replace("refs/", "refs/heads/"); + : ReferenceName.LocalBranchPrefix + currentBranch[referencePrefix.Length..]; var repoTip = this.repository.Head.Tip; @@ -385,14 +390,14 @@ public void EnsureLocalBranchExistsForCurrentBranch(IRemote? remote, string? cur var referenceName = ReferenceName.Parse(localCanonicalName); if (this.repository.Branches.All(b => !b.Name.Equals(referenceName))) { - this.log.Info(isBranch + this.log.Info(isLocalBranch ? $"Creating local branch {referenceName}" : $"Creating local branch {referenceName} pointing at {repoTipId}"); this.repository.Refs.Add(localCanonicalName, repoTipId.Sha); } else { - this.log.Info(isBranch + this.log.Info(isLocalBranch ? $"Updating local branch {referenceName} to point at {repoTipId}" : $"Updating local branch {referenceName} to match ref {currentBranch}"); var localRef = this.repository.Refs[localCanonicalName]; diff --git a/src/GitVersion.Core/Core/GitVersionCalculateTool.cs b/src/GitVersion.Core/Core/GitVersionCalculateTool.cs index 9274ec265f..92c48bd78b 100644 --- a/src/GitVersion.Core/Core/GitVersionCalculateTool.cs +++ b/src/GitVersion.Core/Core/GitVersionCalculateTool.cs @@ -1,65 +1,62 @@ +using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Helpers; using GitVersion.Logging; using GitVersion.OutputVariables; using GitVersion.VersionCalculation; -using GitVersion.VersionCalculation.Cache; +using GitVersion.VersionCalculation.Caching; using Microsoft.Extensions.Options; namespace GitVersion; -public class GitVersionCalculateTool : IGitVersionCalculateTool +internal class GitVersionCalculateTool( + ILog log, + INextVersionCalculator nextVersionCalculator, + IVariableProvider variableProvider, + IGitPreparer gitPreparer, + IGitVersionCacheProvider gitVersionCacheProvider, + IOptions options, + Lazy versionContext) + : IGitVersionCalculateTool { - private readonly ILog log; - private readonly IGitVersionCache gitVersionCache; - private readonly INextVersionCalculator nextVersionCalculator; - private readonly IVariableProvider variableProvider; - private readonly IGitPreparer gitPreparer; - private readonly IGitVersionCacheKeyFactory cacheKeyFactory; + private readonly ILog log = log.NotNull(); + private readonly IGitVersionCacheProvider gitVersionCacheProvider = gitVersionCacheProvider.NotNull(); + private readonly INextVersionCalculator nextVersionCalculator = nextVersionCalculator.NotNull(); + private readonly IVariableProvider variableProvider = variableProvider.NotNull(); + private readonly IGitPreparer gitPreparer = gitPreparer.NotNull(); - private readonly IOptions options; - private readonly Lazy versionContext; - private GitVersionContext context => this.versionContext.Value; + private readonly IOptions options = options.NotNull(); + private readonly Lazy versionContext = versionContext.NotNull(); - public GitVersionCalculateTool(ILog log, INextVersionCalculator nextVersionCalculator, - IVariableProvider variableProvider, IGitPreparer gitPreparer, - IGitVersionCache gitVersionCache, IGitVersionCacheKeyFactory cacheKeyFactory, - IOptions options, Lazy versionContext) - { - this.log = log.NotNull(); - - this.nextVersionCalculator = nextVersionCalculator.NotNull(); - this.variableProvider = variableProvider.NotNull(); - this.gitPreparer = gitPreparer.NotNull(); - - this.cacheKeyFactory = cacheKeyFactory.NotNull(); - this.gitVersionCache = gitVersionCache.NotNull(); + private GitVersionContext Context => this.versionContext.Value; - this.options = options.NotNull(); - this.versionContext = versionContext.NotNull(); - } - - public VersionVariables CalculateVersionVariables() + public GitVersionVariables CalculateVersionVariables() { this.gitPreparer.Prepare(); //we need to prepare the repository before using it for version calculation var gitVersionOptions = this.options.Value; - var cacheKey = this.cacheKeyFactory.Create(gitVersionOptions.ConfigInfo.OverrideConfig); - var versionVariables = gitVersionOptions.Settings.NoCache ? default : this.gitVersionCache.LoadVersionVariablesFromDiskCache(cacheKey); + var versionVariables = !gitVersionOptions.Settings.NoCache + ? this.gitVersionCacheProvider.LoadVersionVariablesFromDiskCache() + : default; if (versionVariables != null) return versionVariables; - var nextVersion = this.nextVersionCalculator.FindVersion(); - versionVariables = this.variableProvider.GetVariablesFor(nextVersion.IncrementedVersion, nextVersion.Configuration, context.IsCurrentCommitTagged); + var semanticVersion = this.nextVersionCalculator.FindVersion(); + + var branchConfiguration = Context.Configuration.GetBranchConfiguration(Context.CurrentBranch); + EffectiveConfiguration effectiveConfiguration = new(Context.Configuration, branchConfiguration); + versionVariables = this.variableProvider.GetVariablesFor( + semanticVersion, Context.Configuration, effectiveConfiguration.PreReleaseWeight); if (gitVersionOptions.Settings.NoCache) return versionVariables; try { - this.gitVersionCache.WriteVariablesToDiskCache(cacheKey, versionVariables); + this.gitVersionCacheProvider.WriteVariablesToDiskCache(versionVariables); } catch (AggregateException e) { - this.log.Warning($"One or more exceptions during cache write:{System.Environment.NewLine}{e}"); + this.log.Warning($"One or more exceptions during cache write:{PathHelper.NewLine}{e}"); } return versionVariables; diff --git a/src/GitVersion.Core/Core/GitVersionContextFactory.cs b/src/GitVersion.Core/Core/GitVersionContextFactory.cs index 2f8ed80193..b4a17d25d1 100644 --- a/src/GitVersion.Core/Core/GitVersionContextFactory.cs +++ b/src/GitVersion.Core/Core/GitVersionContextFactory.cs @@ -1,41 +1,51 @@ using GitVersion.Common; using GitVersion.Configuration; +using GitVersion.Core; using GitVersion.Extensions; using Microsoft.Extensions.Options; namespace GitVersion; -public class GitVersionContextFactory : IGitVersionContextFactory +internal class GitVersionContextFactory( + IConfigurationProvider configurationProvider, + IRepositoryStore repositoryStore, + ITaggedSemanticVersionRepository taggedSemanticVersionRepository, + IOptions options) + : IGitVersionContextFactory { - private readonly IConfigProvider configProvider; - private readonly IRepositoryStore repositoryStore; - private readonly IOptions options; - - public GitVersionContextFactory(IConfigProvider configProvider, IRepositoryStore repositoryStore, IOptions options) - { - this.configProvider = configProvider.NotNull(); - this.repositoryStore = repositoryStore.NotNull(); - this.options = options.NotNull(); - } + private readonly IConfigurationProvider configurationProvider = configurationProvider.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly ITaggedSemanticVersionRepository taggedSemanticVersionRepository = taggedSemanticVersionRepository.NotNull(); + private readonly IOptions options = options.NotNull(); public GitVersionContext Create(GitVersionOptions gitVersionOptions) { - var currentBranch = this.repositoryStore.GetTargetBranch(gitVersionOptions.RepositoryInfo.TargetBranch); - if (currentBranch == null) - throw new InvalidOperationException("Need a branch to operate on"); + var overrideConfiguration = this.options.Value.ConfigurationInfo.OverrideConfiguration; + var configuration = this.configurationProvider.Provide(overrideConfiguration); + + var currentBranch = this.repositoryStore.GetTargetBranch(gitVersionOptions.RepositoryInfo.TargetBranch) + ?? throw new InvalidOperationException("Need a branch to operate on"); + var currentCommit = this.repositoryStore.GetCurrentCommit( + currentBranch, gitVersionOptions.RepositoryInfo.CommitId, configuration.Ignore + ); - var currentCommit = this.repositoryStore.GetCurrentCommit(currentBranch, gitVersionOptions.RepositoryInfo.CommitId); + if (currentCommit is null) throw new GitVersionException("No commits found on the current branch."); - var configuration = this.configProvider.Provide(this.options.Value.ConfigInfo.OverrideConfig); if (currentBranch.IsDetachedHead) { - var branchForCommit = this.repositoryStore.GetBranchesContainingCommit(currentCommit, onlyTrackedBranches: gitVersionOptions.Settings.OnlyTrackedBranches).OnlyOrDefault(); + var branchForCommit = this.repositoryStore.GetBranchesContainingCommit( + currentCommit, onlyTrackedBranches: gitVersionOptions.Settings.OnlyTrackedBranches + ).OnlyOrDefault(); currentBranch = branchForCommit ?? currentBranch; } - var currentCommitTaggedVersion = this.repositoryStore.GetCurrentCommitTaggedVersion(currentCommit, configuration.TagPrefix, handleDetachedBranch: currentBranch.IsDetachedHead); + bool isCurrentCommitTagged = this.taggedSemanticVersionRepository.GetTaggedSemanticVersions( + tagPrefix: configuration.TagPrefix, + format: configuration.SemanticVersionFormat, + ignore: configuration.Ignore + ).Contains(currentCommit); var numberOfUncommittedChanges = this.repositoryStore.GetNumberOfUncommittedChanges(); - return new GitVersionContext(currentBranch, currentCommit, configuration, currentCommitTaggedVersion, numberOfUncommittedChanges); + return new(currentBranch, currentCommit, configuration, isCurrentCommitTagged, numberOfUncommittedChanges); } } diff --git a/src/GitVersion.Core/Core/GitVersionModule.cs b/src/GitVersion.Core/Core/GitVersionModule.cs deleted file mode 100644 index 3762aeb2ec..0000000000 --- a/src/GitVersion.Core/Core/GitVersionModule.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion; - -public abstract class GitVersionModule : IGitVersionModule -{ - public abstract void RegisterTypes(IServiceCollection services); - - protected static IEnumerable FindAllDerivedTypes(Assembly assembly) - { - var derivedType = typeof(T); - return assembly.GetTypes().Where(t => t != derivedType && derivedType.IsAssignableFrom(t)); - } -} diff --git a/src/GitVersion.Core/Core/GitVersionOutputTool.cs b/src/GitVersion.Core/Core/GitVersionOutputTool.cs deleted file mode 100644 index 2de67aeb6a..0000000000 --- a/src/GitVersion.Core/Core/GitVersionOutputTool.cs +++ /dev/null @@ -1,81 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.OutputVariables; -using GitVersion.VersionConverters.AssemblyInfo; -using GitVersion.VersionConverters.GitVersionInfo; -using GitVersion.VersionConverters.OutputGenerator; -using GitVersion.VersionConverters.WixUpdater; -using Microsoft.Extensions.Options; - -namespace GitVersion; - -public class GitVersionOutputTool : IGitVersionOutputTool -{ - private readonly GitVersionOptions gitVersionOptions; - private readonly IOutputGenerator outputGenerator; - private readonly IWixVersionFileUpdater wixVersionFileUpdater; - private readonly IGitVersionInfoGenerator gitVersionInfoGenerator; - private readonly IAssemblyInfoFileUpdater assemblyInfoFileUpdater; - private readonly IProjectFileUpdater projectFileUpdater; - - public GitVersionOutputTool(IOptions options, - IOutputGenerator outputGenerator, IWixVersionFileUpdater wixVersionFileUpdater, - IGitVersionInfoGenerator gitVersionInfoGenerator, IAssemblyInfoFileUpdater assemblyInfoFileUpdater, - IProjectFileUpdater projectFileUpdater) - { - this.gitVersionOptions = options.Value.NotNull(); - - this.outputGenerator = outputGenerator.NotNull(); - - this.wixVersionFileUpdater = wixVersionFileUpdater.NotNull(); - this.gitVersionInfoGenerator = gitVersionInfoGenerator.NotNull(); - this.assemblyInfoFileUpdater = assemblyInfoFileUpdater.NotNull(); - this.projectFileUpdater = projectFileUpdater.NotNull(); - } - - public void OutputVariables(VersionVariables variables, bool updateBuildNumber) - { - using (this.outputGenerator) - { - this.outputGenerator.Execute(variables, new OutputContext(gitVersionOptions.WorkingDirectory, gitVersionOptions.OutputFile, updateBuildNumber)); - } - } - - public void UpdateAssemblyInfo(VersionVariables variables) - { - var assemblyInfoContext = new AssemblyInfoContext(gitVersionOptions.WorkingDirectory, gitVersionOptions.AssemblyInfo.EnsureAssemblyInfo, gitVersionOptions.AssemblyInfo.Files.ToArray()); - - if (gitVersionOptions.AssemblyInfo.UpdateProjectFiles) - { - using (this.projectFileUpdater) - { - this.projectFileUpdater.Execute(variables, assemblyInfoContext); - } - } - else if (gitVersionOptions.AssemblyInfo.UpdateAssemblyInfo) - { - using (this.assemblyInfoFileUpdater) - { - this.assemblyInfoFileUpdater.Execute(variables, assemblyInfoContext); - } - } - } - - public void UpdateWixVersionFile(VersionVariables variables) - { - if (gitVersionOptions.WixInfo.ShouldUpdate) - { - using (this.wixVersionFileUpdater) - { - this.wixVersionFileUpdater.Execute(variables, new WixVersionContext(gitVersionOptions.WorkingDirectory)); - } - } - } - - public void GenerateGitVersionInformation(VersionVariables variables, FileWriteInfo fileWriteInfo) - { - using (this.gitVersionInfoGenerator) - { - this.gitVersionInfoGenerator.Execute(variables, new GitVersionInfoContext(gitVersionOptions.WorkingDirectory, fileWriteInfo.FileName, fileWriteInfo.FileExtension)); - } - } -} diff --git a/src/GitVersion.Core/Core/IBranchRepository.cs b/src/GitVersion.Core/Core/IBranchRepository.cs new file mode 100644 index 0000000000..a58e603988 --- /dev/null +++ b/src/GitVersion.Core/Core/IBranchRepository.cs @@ -0,0 +1,11 @@ +using GitVersion.Configuration; +using GitVersion.Git; + +namespace GitVersion.Core; + +internal interface IBranchRepository +{ + IEnumerable GetMainBranches(IGitVersionConfiguration configuration, params IBranch[] excludeBranches); + + IEnumerable GetReleaseBranches(IGitVersionConfiguration configuration, params IBranch[] excludeBranches); +} diff --git a/src/GitVersion.Core/Core/ITaggedSemanticVersionRepository.cs b/src/GitVersion.Core/Core/ITaggedSemanticVersionRepository.cs new file mode 100644 index 0000000000..8177f1600d --- /dev/null +++ b/src/GitVersion.Core/Core/ITaggedSemanticVersionRepository.cs @@ -0,0 +1,22 @@ +using GitVersion.Configuration; +using GitVersion.Git; + +namespace GitVersion.Core; + +internal interface ITaggedSemanticVersionRepository +{ + ILookup GetTaggedSemanticVersionsOfBranch( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore); + + ILookup GetTaggedSemanticVersionsOfMergeTarget( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore); + + ILookup GetTaggedSemanticVersions( + string? tagPrefix, SemanticVersionFormat format, IIgnoreConfiguration ignore); +} diff --git a/src/GitVersion.Core/Core/ITaggedSemanticVersionService.cs b/src/GitVersion.Core/Core/ITaggedSemanticVersionService.cs new file mode 100644 index 0000000000..8c476cc7f5 --- /dev/null +++ b/src/GitVersion.Core/Core/ITaggedSemanticVersionService.cs @@ -0,0 +1,42 @@ +using GitVersion.Configuration; +using GitVersion.Git; + +namespace GitVersion.Core; + +internal interface ITaggedSemanticVersionService +{ + ILookup GetTaggedSemanticVersions( + IBranch branch, + IGitVersionConfiguration configuration, + string? label, + DateTimeOffset? notOlderThan, + TaggedSemanticVersions taggedSemanticVersion); + + ILookup GetTaggedSemanticVersionsOfBranch( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore, + string? label = null, + DateTimeOffset? notOlderThan = null); + + ILookup GetTaggedSemanticVersionsOfMergeTarget( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore, + string? label = null, + DateTimeOffset? notOlderThan = null); + + ILookup GetTaggedSemanticVersionsOfMainBranches( + IGitVersionConfiguration configuration, + DateTimeOffset? notOlderThan = null, + string? label = null, + params IBranch[] excludeBranches); + + ILookup GetTaggedSemanticVersionsOfReleaseBranches( + IGitVersionConfiguration configuration, + DateTimeOffset? notOlderThan = null, + string? label = null, + params IBranch[] excludeBranches); +} diff --git a/src/GitVersion.Core/Core/MainlineBranchFinder.cs b/src/GitVersion.Core/Core/MainlineBranchFinder.cs index b4fed2e22b..2e2ad2fe96 100644 --- a/src/GitVersion.Core/Core/MainlineBranchFinder.cs +++ b/src/GitVersion.Core/Core/MainlineBranchFinder.cs @@ -1,102 +1,75 @@ using System.Text.RegularExpressions; using GitVersion.Common; +using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Git; using GitVersion.Logging; -using GitVersion.Model.Configuration; namespace GitVersion; -internal class MainlineBranchFinder +internal class MainlineBranchFinder( + IRepositoryStore repositoryStore, + IGitRepository repository, + IGitVersionConfiguration configuration, + ILog log) { - private readonly Config configuration; - private readonly ILog log; - private readonly IEnumerable>? mainlineBranchConfigs; - private readonly IGitRepository repository; - private readonly IRepositoryStore repositoryStore; - - - public MainlineBranchFinder(IRepositoryStore repositoryStore, - IGitRepository repository, - Config configuration, - IEnumerable>? mainlineBranchConfigs, - ILog log) - { - this.repositoryStore = repositoryStore.NotNull(); - this.repository = repository.NotNull(); - this.configuration = configuration.NotNull(); - this.mainlineBranchConfigs = mainlineBranchConfigs; - this.log = log.NotNull(); - } - + private readonly IGitVersionConfiguration configuration = configuration.NotNull(); + private readonly ILog log = log.NotNull(); + private readonly IGitRepository repository = repository.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly List mainlineBranchConfigurations = + configuration.Branches.Select(e => e.Value).Where(b => b.IsMainBranch == true).ToList(); public IDictionary> FindMainlineBranches(ICommit commit) { var branchOriginFinder = new BranchOriginFinder(commit, this.repositoryStore, this.configuration, this.log); return this.repository.Branches - .Where(BranchIsMainline) + .Where(IsMainBranch) .Select(branchOriginFinder.BranchOrigin) .Where(bc => bc != BranchCommit.Empty) .GroupBy(bc => bc.Commit.Sha, bc => bc.Branch) .ToDictionary(group => group.Key, x => x.ToList()); } - - private bool BranchIsMainline(INamedReference branch) + private bool IsMainBranch(INamedReference branch) { var matcher = new MainlineConfigBranchMatcher(branch, this.log); - return this.mainlineBranchConfigs?.Any(matcher.IsMainline) == true; + return this.mainlineBranchConfigurations.Any(matcher.IsMainBranch); } - private class MainlineConfigBranchMatcher + private class MainlineConfigBranchMatcher(INamedReference branch, ILog log) { - private readonly INamedReference branch; - private readonly ILog log; - - public MainlineConfigBranchMatcher(INamedReference branch, ILog log) - { - this.branch = branch; - this.log = log; - } + private readonly INamedReference branch = branch.NotNull(); + private readonly ILog log = log.NotNull(); - public bool IsMainline(KeyValuePair mainlineBranchConfig) + public bool IsMainBranch(IBranchConfiguration value) { - var (_, value) = mainlineBranchConfig; - if (value?.Regex == null) + if (value.RegularExpression == null) return false; - var mainlineRegex = value.Regex; - var branchName = this.branch.Name.WithoutRemote; + var mainlineRegex = value.RegularExpression; + var branchName = this.branch.Name.WithoutOrigin; var match = Regex.IsMatch(branchName, mainlineRegex); this.log.Info($"'{mainlineRegex}' {(match ? "matches" : "does not match")} '{branchName}'."); return match; } } - - private class BranchOriginFinder + private class BranchOriginFinder(ICommit commit, IRepositoryStore repositoryStore, IGitVersionConfiguration configuration, ILog log) { - private readonly ICommit commit; - private readonly Config configuration; - private readonly ILog log; - private readonly IRepositoryStore repositoryStore; - - public BranchOriginFinder(ICommit commit, IRepositoryStore repositoryStore, Config configuration, ILog log) - { - this.repositoryStore = repositoryStore; - this.commit = commit; - this.configuration = configuration; - this.log = log; - } + private readonly ICommit commit = commit.NotNull(); + private readonly IGitVersionConfiguration configuration = configuration.NotNull(); + private readonly ILog log = log.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); public BranchCommit BranchOrigin(IBranch branch) { var branchOrigin = FindBranchOrigin(branch); return branchOrigin == null ? BranchCommit.Empty - : new BranchCommit(branchOrigin, branch); + : new(branchOrigin, branch); } - private ICommit? FindBranchOrigin(IBranch branch) { if (branch.Tip == null) @@ -110,7 +83,7 @@ public BranchCommit BranchOrigin(IBranch branch) return mergeBase; } - var branchCommit = this.repositoryStore.FindCommitBranchWasBranchedFrom(branch, this.configuration); + var branchCommit = this.repositoryStore.FindCommitBranchBranchedFrom(branch, this.configuration); if (branchCommit != BranchCommit.Empty) { this.log.Info($"Found parent commit {branchCommit.Commit.Sha} for '{branchName}'."); diff --git a/src/GitVersion.Core/Core/MergeBaseFinder.cs b/src/GitVersion.Core/Core/MergeBaseFinder.cs index 4935e5b0c8..28ad16fc9a 100644 --- a/src/GitVersion.Core/Core/MergeBaseFinder.cs +++ b/src/GitVersion.Core/Core/MergeBaseFinder.cs @@ -1,22 +1,16 @@ using GitVersion.Common; using GitVersion.Extensions; +using GitVersion.Git; using GitVersion.Logging; namespace GitVersion; -internal class MergeBaseFinder +internal class MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepository, ILog log) { - private readonly ILog log; - private readonly Dictionary, ICommit> mergeBaseCache = new(); - private readonly IGitRepository repository; - private readonly IRepositoryStore repositoryStore; - - public MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepository, ILog log) - { - this.repositoryStore = repositoryStore.NotNull(); - this.repository = gitRepository.NotNull(); - this.log = log.NotNull(); - } + private readonly ILog log = log.NotNull(); + private readonly IGitRepository repository = gitRepository.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly Dictionary, ICommit> mergeBaseCache = []; public ICommit? FindMergeBaseOf(IBranch? first, IBranch? second) { @@ -25,16 +19,16 @@ public MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepos var key = Tuple.Create(first, second); - if (this.mergeBaseCache.ContainsKey(key)) + if (this.mergeBaseCache.TryGetValue(key, out var mergeBase)) { this.log.Debug($"Cache hit for merge base between '{first}' and '{second}'."); - return this.mergeBaseCache[key]; + return mergeBase; } using (this.log.IndentLog($"Finding merge base between '{first}' and '{second}'.")) { // Other branch tip is a forward merge - var commitToFindCommonBase = second?.Tip; + var commitToFindCommonBase = second.Tip; var commit = first.Tip; if (commit == null) @@ -52,14 +46,14 @@ public MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepos if (findMergeBase == null) { - this.log.Info($"No merge base of {first}' and '{second} could be found."); + this.log.Info($"No merge base of '{first}' and '{second}' could be found."); return null; } // Store in cache. this.mergeBaseCache.Add(key, findMergeBase); - this.log.Info($"Merge base of {first}' and '{second} is {findMergeBase}"); + this.log.Info($"Merge base of '{first}' and '{second}' is '{findMergeBase}'"); return findMergeBase; } } @@ -70,7 +64,7 @@ public MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepos if (findMergeBase == null) return null; - this.log.Info($"Found merge base of {findMergeBase}"); + this.log.Info($"Found merge base of '{findMergeBase}'"); // We do not want to include merge base commits which got forward merged into the other branch ICommit? forwardMerge; @@ -83,7 +77,7 @@ public MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepos continue; // TODO Fix the logging up in this section - var second = forwardMerge.Parents.First(); + var second = forwardMerge.Parents[0]; this.log.Debug($"Second {second}"); var mergeBase = this.repositoryStore.FindMergeBase(commit, second); if (mergeBase == null) @@ -103,7 +97,7 @@ public MergeBaseFinder(IRepositoryStore repositoryStore, IGitRepository gitRepos findMergeBase = mergeBase; commitToFindCommonBase = second; - this.log.Info($"Merge base was due to a forward merge, next merge base is {findMergeBase}"); + this.log.Info($"next merge base --> {findMergeBase}"); } while (forwardMerge != null); return findMergeBase; diff --git a/src/GitVersion.Core/Core/MergeCommitFinder.cs b/src/GitVersion.Core/Core/MergeCommitFinder.cs index 20e496f6a3..1a5a42e3c8 100644 --- a/src/GitVersion.Core/Core/MergeCommitFinder.cs +++ b/src/GitVersion.Core/Core/MergeCommitFinder.cs @@ -1,33 +1,26 @@ +using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Git; using GitVersion.Logging; -using GitVersion.Model.Configuration; namespace GitVersion; -internal class MergeCommitFinder +internal class MergeCommitFinder(RepositoryStore repositoryStore, IGitVersionConfiguration configuration, IEnumerable excludedBranches, ILog log) { - private readonly IEnumerable excludedBranches; - private readonly ILog log; - private readonly Dictionary> mergeBaseCommitsCache = new(); - private readonly RepositoryStore repositoryStore; - private readonly Config configuration; - - public MergeCommitFinder(RepositoryStore repositoryStore, Config configuration, IEnumerable excludedBranches, ILog log) - { - this.repositoryStore = repositoryStore.NotNull(); - this.configuration = configuration.NotNull(); - this.excludedBranches = repositoryStore.ExcludingBranches(excludedBranches.NotNull()); - this.log = log.NotNull(); - } + private readonly ILog log = log.NotNull(); + private readonly IEnumerable branches = repositoryStore.ExcludingBranches(excludedBranches.NotNull()); + private readonly RepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly IGitVersionConfiguration configuration = configuration.NotNull(); + private readonly Dictionary> mergeBaseCommitsCache = []; public IEnumerable FindMergeCommitsFor(IBranch branch) { branch = branch.NotNull(); - if (this.mergeBaseCommitsCache.ContainsKey(branch)) + if (this.mergeBaseCommitsCache.TryGetValue(branch, out var mergeCommitsFor)) { - this.log.Debug($"Cache hit for getting merge commits for branch {branch?.Name.Canonical}."); - return this.mergeBaseCommitsCache[branch]; + this.log.Debug($"Cache hit for getting merge commits for branch {branch.Name.Canonical}."); + return mergeCommitsFor; } var branchMergeBases = FindMergeBases(branch) @@ -36,12 +29,12 @@ public IEnumerable FindMergeCommitsFor(IBranch branch) this.mergeBaseCommitsCache.Add(branch, branchMergeBases); - return branchMergeBases.Where(b => !branch.Name.EquivalentTo(b.Branch.Name.WithoutRemote)); + return branchMergeBases.Where(b => !branch.Name.EquivalentTo(b.Branch.Name.WithoutOrigin)); } private IEnumerable FindMergeBases(IBranch branch) { - var sourceBranches = new SourceBranchFinder(this.excludedBranches, this.configuration) + var sourceBranches = new SourceBranchFinder(this.branches, this.configuration) .FindSourceBranchesOf(branch); foreach (var sourceBranch in sourceBranches) @@ -54,7 +47,7 @@ private IEnumerable FindMergeBases(IBranch branch) var findMergeBase = this.repositoryStore.FindMergeBase(branch, sourceBranch); if (findMergeBase != null) - yield return new BranchCommit(findMergeBase, sourceBranch); + yield return new(findMergeBase, sourceBranch); } } } diff --git a/src/GitVersion.Core/Core/RepositoryStore.cs b/src/GitVersion.Core/Core/RepositoryStore.cs index d8ac4706dd..6aa023bdfa 100644 --- a/src/GitVersion.Core/Core/RepositoryStore.cs +++ b/src/GitVersion.Core/Core/RepositoryStore.cs @@ -1,24 +1,24 @@ -using System.Text.RegularExpressions; using GitVersion.Common; using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model.Configuration; namespace GitVersion; -public class RepositoryStore : IRepositoryStore +internal class RepositoryStore : IRepositoryStore { private readonly ILog log; private readonly IGitRepository repository; - private readonly Dictionary> semanticVersionTagsOnBranchCache = new(); + private readonly MergeBaseFinder mergeBaseFinder; public RepositoryStore(ILog log, IGitRepository repository) { this.log = log.NotNull(); this.repository = repository.NotNull(); - this.mergeBaseFinder = new MergeBaseFinder(this, repository, log); + this.mergeBaseFinder = new(this, repository, log); } /// @@ -27,8 +27,11 @@ public RepositoryStore(ILog log, IGitRepository repository) public ICommit? FindMergeBase(IBranch? branch, IBranch? otherBranch) => this.mergeBaseFinder.FindMergeBaseOf(branch, otherBranch); - public ICommit? GetCurrentCommit(IBranch currentBranch, string? commitId) + public ICommit? GetCurrentCommit(IBranch currentBranch, string? commitId, IIgnoreConfiguration ignore) { + currentBranch.NotNull(); + ignore.NotNull(); + ICommit? currentCommit = null; if (!commitId.IsNullOrWhiteSpace()) { @@ -45,51 +48,18 @@ public RepositoryStore(ILog log, IGitRepository repository) } } + IEnumerable commits = currentBranch.Commits; if (currentCommit != null) - return currentCommit; - - this.log.Info("Using latest commit on specified branch"); - currentCommit = currentBranch.Tip; - - return currentCommit; - } - - public ICommit GetBaseVersionSource(ICommit currentBranchTip) - { - try { - var filter = new CommitFilter { IncludeReachableFrom = currentBranchTip }; - var commitCollection = this.repository.Commits.QueryBy(filter); - - return commitCollection.First(c => !c.Parents.Any()); + commits = currentBranch.Commits.GetCommitsPriorTo(currentCommit.When); } - catch (Exception exception) + else { - throw new GitVersionException($"Cannot find commit {currentBranchTip}. Please ensure that the repository is an unshallow clone with `git fetch --unshallow`.", exception); + this.log.Info("Using latest commit on specified branch"); } - } - - public IEnumerable GetMainlineCommitLog(ICommit? baseVersionSource, ICommit? mainlineTip) - { - if (mainlineTip is null) - { - return Enumerable.Empty(); - } - - var filter = new CommitFilter { IncludeReachableFrom = mainlineTip, ExcludeReachableFrom = baseVersionSource, SortBy = CommitSortStrategies.Reverse, FirstParentOnly = true }; - - return this.repository.Commits.QueryBy(filter); - } - - public IEnumerable GetMergeBaseCommits(ICommit? mergeCommit, ICommit? mergedHead, ICommit? findMergeBase) - { - var filter = new CommitFilter { IncludeReachableFrom = mergedHead, ExcludeReachableFrom = findMergeBase }; - var commitCollection = this.repository.Commits.QueryBy(filter); - var commits = mergeCommit != null - ? new[] { mergeCommit }.Union(commitCollection) - : commitCollection; - return commits; + commits = ignore.Filter(commits); + return commits.FirstOrDefault(); } public IBranch GetTargetBranch(string? targetBranchName) @@ -102,7 +72,7 @@ public IBranch GetTargetBranch(string? targetBranchName) return desiredBranch; // There are some edge cases where HEAD is not pointing to the desired branch. - // Therefore it's important to verify if 'currentBranch' is indeed the desired branch. + // Therefore, it's important to verify if 'currentBranch' is indeed the desired branch. var targetBranch = FindBranch(targetBranchName); // CanonicalName can be "refs/heads/develop", so we need to check for "/{TargetBranch}" as well @@ -110,10 +80,7 @@ public IBranch GetTargetBranch(string? targetBranchName) return desiredBranch; // In the case where HEAD is not the desired branch, try to find the branch with matching name - desiredBranch = this.repository.Branches - .Where(b => b.Name.EquivalentTo(targetBranchName)) - .OrderBy(b => b.IsRemote) - .FirstOrDefault(); + desiredBranch = this.repository.Branches.Where(b => b.Name.EquivalentTo(targetBranchName)).MinBy(b => b.IsRemote); // Failsafe in case the specified branch is invalid desiredBranch ??= this.repository.Head; @@ -121,68 +88,94 @@ public IBranch GetTargetBranch(string? targetBranchName) return desiredBranch; } - public IBranch? FindBranch(string? branchName) => this.repository.Branches.FirstOrDefault(x => x.Name.EquivalentTo(branchName)); + public IBranch? FindBranch(ReferenceName branchName) => this.repository.Branches.FirstOrDefault(x => x.Name.Equals(branchName)); - public IBranch? FindMainBranch(Config configuration) - { - var mainBranchRegex = configuration.Branches[Config.MainBranchKey]?.Regex - ?? configuration.Branches[Config.MasterBranchKey]?.Regex; + public IBranch? FindBranch(string branchName) => this.repository.Branches.FirstOrDefault(x => x.Name.EquivalentTo(branchName)); - if (mainBranchRegex == null) - { - return FindBranch(Config.MainBranchKey) ?? FindBranch(Config.MasterBranchKey); - } + public IEnumerable ExcludingBranches(IEnumerable branchesToExclude) => this.repository.Branches.ExcludeBranches(branchesToExclude); + + public IEnumerable GetBranchesContainingCommit(ICommit commit, IEnumerable? branches = null, bool onlyTrackedBranches = false) + { + commit.NotNull(); - return this.repository.Branches.FirstOrDefault(b => - Regex.IsMatch(b.Name.Friendly, mainBranchRegex, RegexOptions.IgnoreCase)); + var branchesContainingCommitFinder = new BranchesContainingCommitFinder(this.repository, this.log); + return branchesContainingCommitFinder.GetBranchesContainingCommit(commit, branches, onlyTrackedBranches); } - public IBranch? GetChosenBranch(Config configuration) + public IEnumerable GetSourceBranches(IBranch branch, IGitVersionConfiguration configuration, + params IBranch[] excludedBranches) + => GetSourceBranches(branch, configuration, (IEnumerable)excludedBranches); + + public IEnumerable GetSourceBranches( + IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches) { - var developBranchRegex = configuration.Branches[Config.DevelopBranchKey]?.Regex; - var mainBranchRegex = configuration.Branches[Config.MainBranchKey]?.Regex; - - if (mainBranchRegex == null || developBranchRegex == null) return null; - var chosenBranch = this.repository.Branches.FirstOrDefault(b => - Regex.IsMatch(b.Name.Friendly, developBranchRegex, RegexOptions.IgnoreCase) - || Regex.IsMatch(b.Name.Friendly, mainBranchRegex, RegexOptions.IgnoreCase)); - return chosenBranch; - } + var returnedBranches = new HashSet(); - public IEnumerable GetBranchesForCommit(ICommit commit) - => this.repository.Branches.Where(b => !b.IsRemote && Equals(b.Tip, commit)).ToList(); + var referenceLookup = this.repository.Refs.ToLookup(r => r.TargetIdentifier); - public IEnumerable GetExcludedInheritBranches(Config configuration) - => this.repository.Branches.Where(b => + var commitBranches = FindCommitBranchesBranchedFrom(branch, configuration, excludedBranches).ToHashSet(); + + var ignore = new HashSet(); + foreach (var commitBranch in commitBranches) { - var branchConfiguration = configuration.ForBranch(b); + foreach (var commit in branch.Commits.Where(element => element.When > commitBranch.Commit.When)) + { + var parents = commit.Parents.ToArray(); + if (parents.Length > 1 && parents.Any(element => element.Equals(commitBranch.Commit))) + { + ignore.Add(commitBranch); + } + } + } - return branchConfiguration == null || branchConfiguration.Increment == IncrementStrategy.Inherit; - }).ToList(); + foreach (var item in commitBranches.Skip(1).Reverse()) + { + if (ignore.Contains(item)) continue; - public IEnumerable GetReleaseBranches(IEnumerable> releaseBranchConfig) - => this.repository.Branches.Where(b => IsReleaseBranch(b, releaseBranchConfig)); + foreach (var commitBranch in commitBranches) + { + if (item.Commit.Equals(commitBranch.Commit)) break; + + foreach (var commit in commitBranch.Branch.Commits.Where(element => element.When >= item.Commit.When)) + { + if (commit.Equals(item.Commit)) + { + commitBranches.Remove(item); + } + } + } + } - public IEnumerable ExcludingBranches(IEnumerable branchesToExclude) => this.repository.Branches.ExcludeBranches(branchesToExclude); + foreach (var branchGrouping in commitBranches.GroupBy(element => element.Commit, element => element.Branch)) + { + bool referenceMatchFound = false; + var referenceNames = referenceLookup[branchGrouping.Key.Sha].Select(element => element.Name).ToHashSet(); - public IEnumerable GetBranchesContainingCommit(ICommit? commit, IEnumerable? branches = null, bool onlyTrackedBranches = false) - { - var branchesContainingCommitFinder = new BranchesContainingCommitFinder(this.repository, this.log); - return branchesContainingCommitFinder.GetBranchesContainingCommit(commit, branches, onlyTrackedBranches); - } + foreach (var item in branchGrouping) + { + if (referenceNames.Contains(item.Name)) + { + if (returnedBranches.Add(item)) yield return item; + referenceMatchFound = true; + } + } - public IDictionary> GetMainlineBranches(ICommit commit, Config configuration, IEnumerable>? mainlineBranchConfigs) - { - var mainlineBranchFinder = new MainlineBranchFinder(this, this.repository, configuration, mainlineBranchConfigs, this.log); - return mainlineBranchFinder.FindMainlineBranches(commit); + if (!referenceMatchFound) + { + foreach (var item in branchGrouping) + { + if (returnedBranches.Add(item)) yield return item; + } + } + } } - /// /// Find the commit where the given branch was branched from another branch. /// If there are multiple such commits and branches, tries to guess based on commit histories. /// - public BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, Config configuration, params IBranch[] excludedBranches) + public BranchCommit FindCommitBranchBranchedFrom(IBranch? branch, IGitVersionConfiguration configuration, + params IBranch[] excludedBranches) { branch = branch.NotNull(); @@ -202,69 +195,48 @@ public BranchCommit FindCommitBranchWasBranchedFrom(IBranch? branch, Config conf if (possibleBranches.Count <= 1) return possibleBranches.SingleOrDefault(); - var first = possibleBranches.First(); - this.log.Info($"Multiple source branches have been found, picking the first one ({first.Branch}).{System.Environment.NewLine}" + - $"This may result in incorrect commit counting.{System.Environment.NewLine}Options were:{System.Environment.NewLine}" + + var first = possibleBranches[0]; + this.log.Info($"Multiple source branches have been found, picking the first one ({first.Branch}).{PathHelper.NewLine}" + + $"This may result in incorrect commit counting.{PathHelper.NewLine}Options were:{PathHelper.NewLine}" + string.Join(", ", possibleBranches.Select(b => b.Branch.ToString()))); return first; } } - public SemanticVersion GetCurrentCommitTaggedVersion(ICommit? commit, string? tagPrefix, bool handleDetachedBranch) - => this.repository.Tags - .SelectMany(t => GetCurrentCommitSemanticVersions(commit, tagPrefix, t, handleDetachedBranch)) - .Max(); + public IEnumerable FindCommitBranchesBranchedFrom( + IBranch branch, IGitVersionConfiguration configuration, params IBranch[] excludedBranches) + => FindCommitBranchesBranchedFrom(branch, configuration, (IEnumerable)excludedBranches); - public IEnumerable GetVersionTagsOnBranch(IBranch branch, string? tagPrefixRegex) + public IEnumerable FindCommitBranchesBranchedFrom( + IBranch branch, IGitVersionConfiguration configuration, IEnumerable excludedBranches) { - branch = branch.NotNull(); - - if (this.semanticVersionTagsOnBranchCache.ContainsKey(branch)) + using (this.log.IndentLog($"Finding branches source of '{branch}'")) { - this.log.Debug($"Cache hit for version tags on branch '{branch.Name.Canonical}"); - return this.semanticVersionTagsOnBranchCache[branch]; - } - - using (this.log.IndentLog($"Getting version tags from branch '{branch.Name.Canonical}'.")) - { - var tags = GetValidVersionTags(tagPrefixRegex); - var tagsBySha = tags.Where(t => t.Tag.TargetSha != null).ToLookup(t => t.Tag.TargetSha, t => t); - - var versionTags = (branch.Commits?.SelectMany(c => tagsBySha[c.Sha].Select(t => t.Semver)) ?? Enumerable.Empty()).ToList(); + if (branch.Tip == null) + { + this.log.Warning($"{branch} has no tip."); + return []; + } - this.semanticVersionTagsOnBranchCache.Add(branch, versionTags); - return versionTags; + return new MergeCommitFinder(this, configuration, excludedBranches, this.log).FindMergeCommitsFor(branch).ToList(); } } - public IEnumerable<(ITag Tag, SemanticVersion Semver, ICommit Commit)> GetValidVersionTags(string? tagPrefixRegex, DateTimeOffset? olderThan = null) + public IReadOnlyList GetCommitLog(ICommit? baseVersionSource, ICommit currentCommit, IIgnoreConfiguration ignore) { - var tags = new List<(ITag, SemanticVersion, ICommit)>(); + currentCommit.NotNull(); + ignore.NotNull(); - foreach (var tag in this.repository.Tags) + var filter = new CommitFilter { - if (!SemanticVersion.TryParse(tag.Name.Friendly, tagPrefixRegex, out var semver)) - continue; - - var commit = tag.PeeledTargetCommit(); - - if (commit == null) - continue; + IncludeReachableFrom = currentCommit, + ExcludeReachableFrom = baseVersionSource, + SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Time + }; - if (olderThan.HasValue && commit.When > olderThan.Value) - continue; + var commits = this.repository.Commits.QueryBy(filter).ToArray(); - tags.Add((tag, semver, commit)); - } - - return tags; - } - - public IEnumerable GetCommitLog(ICommit? baseVersionSource, ICommit? currentCommit) - { - var filter = new CommitFilter { IncludeReachableFrom = currentCommit, ExcludeReachableFrom = baseVersionSource, SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Time }; - - return this.repository.Commits.QueryBy(filter); + return ignore.Filter(commits).ToList(); } public bool IsCommitOnBranch(ICommit? baseVersionSource, IBranch branch, ICommit firstMatchingCommit) @@ -277,25 +249,4 @@ public bool IsCommitOnBranch(ICommit? baseVersionSource, IBranch branch, ICommit public ICommit? FindMergeBase(ICommit commit, ICommit mainlineTip) => this.repository.FindMergeBase(commit, mainlineTip); public int GetNumberOfUncommittedChanges() => this.repository.GetNumberOfUncommittedChanges(); - - private static bool IsReleaseBranch(INamedReference branch, IEnumerable> releaseBranchConfig) - => releaseBranchConfig.Any(c => c.Value?.Regex != null && Regex.IsMatch(branch.Name.Friendly, c.Value.Regex)); - - private IEnumerable GetCurrentCommitSemanticVersions(ICommit? commit, string? tagPrefix, ITag tag, bool handleDetachedBranch) - { - if (commit == null) - return Array.Empty(); - - var targetCommit = tag.PeeledTargetCommit(); - if (targetCommit == null) - return Array.Empty(); - - var commitToCompare = handleDetachedBranch ? FindMergeBase(commit, targetCommit) : commit; - - var tagName = tag.Name.Friendly; - - return Equals(targetCommit, commitToCompare) && SemanticVersion.TryParse(tagName, tagPrefix, out var version) - ? new[] { version } - : Array.Empty(); - } } diff --git a/src/GitVersion.Core/Core/SourceBranchFinder.cs b/src/GitVersion.Core/Core/SourceBranchFinder.cs index d462b38c40..21dad72d68 100644 --- a/src/GitVersion.Core/Core/SourceBranchFinder.cs +++ b/src/GitVersion.Core/Core/SourceBranchFinder.cs @@ -1,20 +1,14 @@ using System.Text.RegularExpressions; using GitVersion.Configuration; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; namespace GitVersion; -internal class SourceBranchFinder +internal class SourceBranchFinder(IEnumerable excludedBranches, IGitVersionConfiguration configuration) { - private readonly Config configuration; - private readonly IEnumerable excludedBranches; - - public SourceBranchFinder(IEnumerable excludedBranches, Config configuration) - { - this.excludedBranches = excludedBranches.NotNull(); - this.configuration = configuration.NotNull(); - } + private readonly IGitVersionConfiguration configuration = configuration.NotNull(); + private readonly IEnumerable excludedBranches = excludedBranches.NotNull(); public IEnumerable FindSourceBranchesOf(IBranch branch) { @@ -22,41 +16,33 @@ public IEnumerable FindSourceBranchesOf(IBranch branch) return this.excludedBranches.Where(predicate.IsSourceBranch); } - private class SourceBranchPredicate + private class SourceBranchPredicate(IBranch branch, IGitVersionConfiguration configuration) { - private readonly IBranch branch; - private readonly IEnumerable sourceBranchRegexes; - - public SourceBranchPredicate(IBranch branch, Config configuration) - { - this.branch = branch; - this.sourceBranchRegexes = GetSourceBranchRegexes(branch, configuration); - } + private readonly IEnumerable sourceBranchRegexes = GetSourceBranchRegexes(branch, configuration); public bool IsSourceBranch(INamedReference sourceBranchCandidate) { - if (Equals(sourceBranchCandidate, this.branch)) + if (Equals(sourceBranchCandidate, branch)) return false; - var branchName = sourceBranchCandidate.Name.Friendly; + var branchName = sourceBranchCandidate.Name.WithoutOrigin; - return this.sourceBranchRegexes - .Any(regex => Regex.IsMatch(branchName, regex)); + return this.sourceBranchRegexes.Any(regex => Regex.IsMatch(branchName, regex)); } - private static IEnumerable GetSourceBranchRegexes(INamedReference branch, Config configuration) + private static IEnumerable GetSourceBranchRegexes(INamedReference branch, IGitVersionConfiguration configuration) { - var branchName = branch.Name.WithoutRemote; - var currentBranchConfig = configuration.GetBranchConfiguration(branchName); + var currentBranchConfig = configuration.GetBranchConfiguration(branch.Name); if (currentBranchConfig.SourceBranches == null) { yield return ".*"; } else { + var branches = configuration.Branches; foreach (var sourceBranch in currentBranchConfig.SourceBranches) { - var regex = configuration.Branches[sourceBranch]?.Regex; + var regex = branches[sourceBranch].RegularExpression; if (regex != null) yield return regex; } diff --git a/src/GitVersion.Core/Core/TaggedSemanticVersionRepository.cs b/src/GitVersion.Core/Core/TaggedSemanticVersionRepository.cs new file mode 100644 index 0000000000..78ec16c8ce --- /dev/null +++ b/src/GitVersion.Core/Core/TaggedSemanticVersionRepository.cs @@ -0,0 +1,135 @@ +using System.Collections.Concurrent; +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.Core; + +internal sealed class TaggedSemanticVersionRepository(ILog log, IGitRepository gitRepository) : ITaggedSemanticVersionRepository +{ + private readonly ConcurrentDictionary<(IBranch, string, SemanticVersionFormat), IReadOnlyList> + taggedSemanticVersionsOfBranchCache = new(); + private readonly ConcurrentDictionary<(IBranch, string, SemanticVersionFormat), IReadOnlyList<(ICommit Key, SemanticVersionWithTag Value)>> + taggedSemanticVersionsOfMergeTargetCache = new(); + private readonly ConcurrentDictionary<(string, SemanticVersionFormat), IReadOnlyList> + taggedSemanticVersionsCache = new(); + private readonly ILog log = log.NotNull(); + + private readonly IGitRepository gitRepository = gitRepository.NotNull(); + + public ILookup GetTaggedSemanticVersionsOfBranch( + IBranch branch, string? tagPrefix, SemanticVersionFormat format, IIgnoreConfiguration ignore) + { + branch.NotNull(); + tagPrefix ??= string.Empty; + + bool isCached = true; + var result = taggedSemanticVersionsOfBranchCache.GetOrAdd(new(branch, tagPrefix, format), _ => + { + isCached = false; + return GetElements().Distinct().OrderByDescending(element => element.Tag.Commit.When).ToList(); + }); + + if (isCached) + { + this.log.Debug( + $"Returning cached tagged semantic versions on branch '{branch.Name.Canonical}'. " + + $"TagPrefix: {tagPrefix} and Format: {format}" + ); + } + + return result.ToLookup(element => element.Tag.Commit, element => element); + + IEnumerable GetElements() + { + using (this.log.IndentLog($"Getting tagged semantic versions on branch '{branch.Name.Canonical}'. " + + $"TagPrefix: {tagPrefix} and Format: {format}")) + { + var semanticVersions = GetTaggedSemanticVersions(tagPrefix, format, ignore); + + foreach (var commit in ignore.Filter(branch.Commits)) + { + foreach (var semanticVersion in semanticVersions[commit]) + { + yield return semanticVersion; + } + } + } + } + } + + public ILookup GetTaggedSemanticVersionsOfMergeTarget( + IBranch branch, string? tagPrefix, SemanticVersionFormat format, IIgnoreConfiguration ignore) + { + branch.NotNull(); + tagPrefix ??= string.Empty; + + bool isCached = true; + var result = taggedSemanticVersionsOfMergeTargetCache.GetOrAdd(new(branch, tagPrefix, format), _ => + { + isCached = false; + return GetElements().Distinct().OrderByDescending(element => element.Key.When).ToList(); + }); + + if (isCached) + { + this.log.Debug( + $"Returning cached tagged semantic versions by track merge target '{branch.Name.Canonical}'. " + + $"TagPrefix: {tagPrefix} and Format: {format}" + ); + } + + return result.ToLookup(element => element.Key, element => element.Value); + + IEnumerable<(ICommit Key, SemanticVersionWithTag Value)> GetElements() + { + using (this.log.IndentLog($"Getting tagged semantic versions by track merge target '{branch.Name.Canonical}'. " + + $"TagPrefix: {tagPrefix} and Format: {format}")) + { + var shaHashSet = new HashSet(ignore.Filter(branch.Commits).Select(element => element.Id.Sha)); + + foreach (var semanticVersion in GetTaggedSemanticVersions(tagPrefix, format, ignore).SelectMany(v => v)) + { + foreach (var commit in semanticVersion.Tag.Commit.Parents.Where(element => shaHashSet.Contains(element.Id.Sha))) + { + yield return new(commit, semanticVersion); + } + } + } + } + } + + public ILookup GetTaggedSemanticVersions( + string? tagPrefix, SemanticVersionFormat format, IIgnoreConfiguration ignore) + { + tagPrefix ??= string.Empty; + + bool isCached = true; + var result = taggedSemanticVersionsCache.GetOrAdd(new(tagPrefix, format), _ => + { + isCached = false; + return GetElements().OrderByDescending(element => element.Tag.Commit.When).ToList(); + }); + + if (isCached) + { + this.log.Debug($"Returning cached tagged semantic versions. TagPrefix: {tagPrefix} and Format: {format}"); + } + + return result.ToLookup(element => element.Tag.Commit, element => element); + + IEnumerable GetElements() + { + this.log.Info($"Getting tagged semantic versions. TagPrefix: {tagPrefix} and Format: {format}"); + + foreach (var tag in ignore.Filter(this.gitRepository.Tags)) + { + if (SemanticVersion.TryParse(tag.Name.Friendly, tagPrefix, out var semanticVersion, format)) + { + yield return new(semanticVersion, tag); + } + } + } + } +} diff --git a/src/GitVersion.Core/Core/TaggedSemanticVersionService.cs b/src/GitVersion.Core/Core/TaggedSemanticVersionService.cs new file mode 100644 index 0000000000..e7e8acffa9 --- /dev/null +++ b/src/GitVersion.Core/Core/TaggedSemanticVersionService.cs @@ -0,0 +1,247 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.Core; + +internal sealed class TaggedSemanticVersionService( + ITaggedSemanticVersionRepository Repository, IBranchRepository BranchRepository) + : ITaggedSemanticVersionService +{ + private ITaggedSemanticVersionRepository Repository { get; } = Repository.NotNull(); + + private IBranchRepository BranchRepository { get; } = BranchRepository.NotNull(); + + public ILookup GetTaggedSemanticVersions( + IBranch branch, + IGitVersionConfiguration configuration, + string? label, + DateTimeOffset? notOlderThan, + TaggedSemanticVersions taggedSemanticVersion) + { + IEnumerable>> GetElements() + { + if (taggedSemanticVersion.HasFlag(TaggedSemanticVersions.OfBranch)) + { + yield return GetTaggedSemanticVersionsOfBranchInternal( + branch: branch, + tagPrefix: configuration.TagPrefix, + format: configuration.SemanticVersionFormat, + ignore: configuration.Ignore, + label: label, + notOlderThan: notOlderThan + ); + } + + if (taggedSemanticVersion.HasFlag(TaggedSemanticVersions.OfMergeTargets)) + { + yield return GetTaggedSemanticVersionsOfMergeTargetInternal( + branch: branch, + tagPrefix: configuration.TagPrefix, + format: configuration.SemanticVersionFormat, + ignore: configuration.Ignore, + label: label, + notOlderThan: notOlderThan + ); + } + + if (taggedSemanticVersion.HasFlag(TaggedSemanticVersions.OfMainBranches)) + { + yield return GetTaggedSemanticVersionsOfMainBranchesInternal( + configuration: configuration, + label: label, + notOlderThan: notOlderThan, + excludeBranches: branch + ); + } + + if (taggedSemanticVersion.HasFlag(TaggedSemanticVersions.OfReleaseBranches)) + { + yield return GetTaggedSemanticVersionsOfReleaseBranchesInternal( + configuration: configuration, + label: label, + notOlderThan: notOlderThan, + excludeBranches: branch + ); + } + } + + return GetElements().SelectMany(elements => elements).Distinct() + .OrderByDescending(element => element.Key.When) + .ToLookup(element => element.Key, element => element.Value); + } + + public ILookup GetTaggedSemanticVersionsOfBranch( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore, + string? label, + DateTimeOffset? notOlderThan) + { + var result = GetTaggedSemanticVersionsOfBranchInternal( + branch: branch, + tagPrefix: tagPrefix, + format: format, + ignore: ignore, + label: label, + notOlderThan: notOlderThan); + + return result.Distinct().OrderByDescending(element => element.Key.When) + .ToLookup(element => element.Key, element => element.Value); + } + + private IEnumerable> GetTaggedSemanticVersionsOfBranchInternal( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore, + string? label, + DateTimeOffset? notOlderThan) + { + var semanticVersionsOfBranch = Repository.GetTaggedSemanticVersionsOfBranch( + branch: branch, tagPrefix: tagPrefix, format: format, ignore: ignore + ); + foreach (var grouping in semanticVersionsOfBranch) + { + if (grouping.Key.When > notOlderThan) continue; + + foreach (var semanticVersion in grouping) + { + if (semanticVersion.Value.IsMatchForBranchSpecificLabel(label)) + { + yield return new(grouping.Key, semanticVersion); + } + } + } + } + + public ILookup GetTaggedSemanticVersionsOfMergeTarget( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore, + string? label, + DateTimeOffset? notOlderThan) + { + var result = GetTaggedSemanticVersionsOfMergeTargetInternal( + branch: branch, + tagPrefix: tagPrefix, + format: format, + ignore: ignore, + label: label, + notOlderThan: notOlderThan); + + return result.Distinct() + .OrderByDescending(element => element.Key.When) + .ToLookup(element => element.Key, element => element.Value); + } + + private IEnumerable> GetTaggedSemanticVersionsOfMergeTargetInternal( + IBranch branch, + string? tagPrefix, + SemanticVersionFormat format, + IIgnoreConfiguration ignore, + string? label, + DateTimeOffset? notOlderThan) + { + var semanticVersionsOfMergeTarget = Repository.GetTaggedSemanticVersionsOfMergeTarget( + branch: branch, + tagPrefix: tagPrefix, + format: format, + ignore: ignore + ); + foreach (var grouping in semanticVersionsOfMergeTarget) + { + if (grouping.Key.When > notOlderThan) continue; + + foreach (var semanticVersion in grouping) + { + if (semanticVersion.Value.IsMatchForBranchSpecificLabel(label)) + { + yield return new(grouping.Key, semanticVersion); + } + } + } + } + + public ILookup GetTaggedSemanticVersionsOfMainBranches( + IGitVersionConfiguration configuration, + DateTimeOffset? notOlderThan, + string? label, + params IBranch[] excludeBranches) + { + var result = GetTaggedSemanticVersionsOfMainBranchesInternal( + configuration: configuration, + notOlderThan: notOlderThan, + label: label, + excludeBranches: excludeBranches); + + return result.Distinct() + .OrderByDescending(element => element.Key.When) + .ToLookup(element => element.Key, element => element.Value); + } + + private IEnumerable> GetTaggedSemanticVersionsOfMainBranchesInternal( + IGitVersionConfiguration configuration, + DateTimeOffset? notOlderThan, + string? label, + params IBranch[] excludeBranches) + { + foreach (var releaseBranch in BranchRepository.GetMainBranches(configuration, excludeBranches)) + { + var taggedSemanticVersions = GetTaggedSemanticVersionsOfBranchInternal( + branch: releaseBranch, + tagPrefix: configuration.TagPrefix, + format: configuration.SemanticVersionFormat, + ignore: configuration.Ignore, + label: label, + notOlderThan: notOlderThan); + + foreach (var semanticVersion in taggedSemanticVersions) + { + yield return semanticVersion; + } + } + } + + public ILookup GetTaggedSemanticVersionsOfReleaseBranches( + IGitVersionConfiguration configuration, + DateTimeOffset? notOlderThan, + string? label, + params IBranch[] excludeBranches) + { + var result = GetTaggedSemanticVersionsOfReleaseBranchesInternal( + configuration: configuration, + notOlderThan: notOlderThan, + label: label, + excludeBranches: excludeBranches); + + return result.Distinct() + .OrderByDescending(element => element.Key.When) + .ToLookup(element => element.Key, element => element.Value); + } + + private IEnumerable> GetTaggedSemanticVersionsOfReleaseBranchesInternal( + IGitVersionConfiguration configuration, + DateTimeOffset? notOlderThan, + string? label, + params IBranch[] excludeBranches) + { + foreach (var releaseBranch in BranchRepository.GetReleaseBranches(configuration, excludeBranches)) + { + var taggedSemanticVersions = GetTaggedSemanticVersionsOfBranchInternal( + branch: releaseBranch, + tagPrefix: configuration.TagPrefix, + format: configuration.SemanticVersionFormat, + ignore: configuration.Ignore, + label: label, + notOlderThan: notOlderThan); + + foreach (var semanticVersion in taggedSemanticVersions) + { + yield return semanticVersion; + } + } + } +} diff --git a/src/GitVersion.Core/Core/TaggedSemanticVersions.cs b/src/GitVersion.Core/Core/TaggedSemanticVersions.cs new file mode 100644 index 0000000000..898a70bd79 --- /dev/null +++ b/src/GitVersion.Core/Core/TaggedSemanticVersions.cs @@ -0,0 +1,17 @@ +namespace GitVersion.Core; + +[Flags] +internal enum TaggedSemanticVersions +{ + None = 0, + + OfBranch = 1, + + OfMergeTargets = 2, + + OfMainBranches = 4, + + OfReleaseBranches = 8, + + All = OfBranch | OfMergeTargets | OfMainBranches | OfReleaseBranches +} diff --git a/src/GitVersion.Core/Extensions/AssemblyInfo.cs b/src/GitVersion.Core/Extensions/AssemblyInfo.cs deleted file mode 100644 index a45791ac7e..0000000000 --- a/src/GitVersion.Core/Extensions/AssemblyInfo.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System.Runtime.CompilerServices; - -[assembly: InternalsVisibleTo("GitVersion.Core.Tests")] -[assembly: InternalsVisibleTo("GitVersion.App.Tests")] -[assembly: InternalsVisibleTo("GitVersion.MsBuild.Tests")] diff --git a/src/GitVersion.Core/Extensions/AssemblyVersionsGeneratorExtensions.cs b/src/GitVersion.Core/Extensions/AssemblyVersionsGeneratorExtensions.cs index d92d63d559..d4465c8eac 100644 --- a/src/GitVersion.Core/Extensions/AssemblyVersionsGeneratorExtensions.cs +++ b/src/GitVersion.Core/Extensions/AssemblyVersionsGeneratorExtensions.cs @@ -1,22 +1,6 @@ -namespace GitVersion.Extensions; - -public enum AssemblyFileVersioningScheme -{ - MajorMinorPatchTag, - MajorMinorPatch, - MajorMinor, - Major, - None -} +using GitVersion.Configuration; -public enum AssemblyVersioningScheme -{ - MajorMinorPatchTag, - MajorMinorPatch, - MajorMinor, - Major, - None -} +namespace GitVersion.Extensions; public static class AssemblyVersionsGeneratorExtensions { @@ -26,7 +10,7 @@ public static class AssemblyVersionsGeneratorExtensions AssemblyVersioningScheme.Major => $"{sv.Major}.0.0.0", AssemblyVersioningScheme.MajorMinor => $"{sv.Major}.{sv.Minor}.0.0", AssemblyVersioningScheme.MajorMinorPatch => $"{sv.Major}.{sv.Minor}.{sv.Patch}.0", - AssemblyVersioningScheme.MajorMinorPatchTag => $"{sv.Major}.{sv.Minor}.{sv.Patch}.{sv.PreReleaseTag?.Number ?? 0}", + AssemblyVersioningScheme.MajorMinorPatchTag => $"{sv.Major}.{sv.Minor}.{sv.Patch}.{sv.PreReleaseTag.Number ?? 0}", AssemblyVersioningScheme.None => null, _ => throw new ArgumentException($"Unexpected value ({scheme}).", nameof(scheme)) }; @@ -37,7 +21,7 @@ public static class AssemblyVersionsGeneratorExtensions AssemblyFileVersioningScheme.Major => $"{sv.Major}.0.0.0", AssemblyFileVersioningScheme.MajorMinor => $"{sv.Major}.{sv.Minor}.0.0", AssemblyFileVersioningScheme.MajorMinorPatch => $"{sv.Major}.{sv.Minor}.{sv.Patch}.0", - AssemblyFileVersioningScheme.MajorMinorPatchTag => $"{sv.Major}.{sv.Minor}.{sv.Patch}.{sv.PreReleaseTag?.Number ?? 0}", + AssemblyFileVersioningScheme.MajorMinorPatchTag => $"{sv.Major}.{sv.Minor}.{sv.Patch}.{sv.PreReleaseTag.Number ?? 0}", AssemblyFileVersioningScheme.None => null, _ => throw new ArgumentException($"Unexpected value ({scheme}).", nameof(scheme)) }; diff --git a/src/GitVersion.Core/Extensions/CallerArgumentExpressionAttribute.cs b/src/GitVersion.Core/Extensions/CallerArgumentExpressionAttribute.cs deleted file mode 100644 index f2eecbc3a7..0000000000 --- a/src/GitVersion.Core/Extensions/CallerArgumentExpressionAttribute.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace System.Runtime.CompilerServices; - -#if !NET5_0 && !NET6_0 - -/// -/// Allows capturing of the expressions passed to a method. -/// -[AttributeUsage(AttributeTargets.Parameter)] -public sealed class CallerArgumentExpressionAttribute : Attribute -{ - /// - /// Initializes a new instance of the class. - /// - /// The name of the targeted parameter. - public CallerArgumentExpressionAttribute(string parameterName) => this.ParameterName = parameterName; - - /// - /// Gets the target parameter name of the CallerArgumentExpression. - /// - /// - /// The name of the targeted parameter of the CallerArgumentExpression. - /// - public string ParameterName { get; } -} -#endif diff --git a/src/GitVersion.Core/Extensions/CommonExtensions.cs b/src/GitVersion.Core/Extensions/CommonExtensions.cs index 5cd5018df9..bcb368cb5a 100644 --- a/src/GitVersion.Core/Extensions/CommonExtensions.cs +++ b/src/GitVersion.Core/Extensions/CommonExtensions.cs @@ -5,30 +5,26 @@ namespace GitVersion.Extensions; public static class CommonExtensions { - public static T NotNull([NotNull] this T? value, [CallerArgumentExpression("value")] string name = "") + public static T NotNull([NotNull] this T? value, [CallerArgumentExpression(nameof(value))] string name = "") where T : class => value ?? throw new ArgumentNullException(name); - public static string NotNullOrEmpty([NotNull] this string? value, [CallerArgumentExpression("value")] string name = "") + public static string NotNullOrEmpty([NotNull] this string? value, [CallerArgumentExpression(nameof(value))] string name = "") { if (string.IsNullOrEmpty(value)) { throw new ArgumentException("The parameter is null or empty.", name); } -#pragma warning disable CS8777 // Parameter must have a non-null value when exiting. - return value!; -#pragma warning restore CS8777 // Parameter must have a non-null value when exiting. + return value; } - public static string NotNullOrWhitespace([NotNull] this string? value, [CallerArgumentExpression("value")] string name = "") + public static string NotNullOrWhitespace([NotNull] this string? value, [CallerArgumentExpression(nameof(value))] string name = "") { if (string.IsNullOrWhiteSpace(value)) { throw new ArgumentException("The parameter is null or empty or contains only white space.", name); } -#pragma warning disable CS8777 // Parameter must have a non-null value when exiting. - return value!; -#pragma warning restore CS8777 // Parameter must have a non-null value when exiting. + return value; } } diff --git a/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs new file mode 100644 index 0000000000..f580c31840 --- /dev/null +++ b/src/GitVersion.Core/Extensions/ConfigurationExtensions.cs @@ -0,0 +1,164 @@ +using System.Text.RegularExpressions; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Helpers; +using GitVersion.VersionCalculation; + +namespace GitVersion.Configuration; + +internal static class ConfigurationExtensions +{ + public static EffectiveBranchConfiguration GetEffectiveBranchConfiguration( + this IGitVersionConfiguration configuration, IBranch branch, EffectiveConfiguration? parentConfiguration = null) + { + var effectiveConfiguration = GetEffectiveConfiguration(configuration, branch.Name, parentConfiguration); + return new EffectiveBranchConfiguration(effectiveConfiguration, branch); + } + + public static EffectiveConfiguration GetEffectiveConfiguration( + this IGitVersionConfiguration configuration, ReferenceName branchName, EffectiveConfiguration? parentConfiguration = null) + { + var branchConfiguration = configuration.GetBranchConfiguration(branchName); + EffectiveConfiguration? fallbackConfiguration = null; + if (branchConfiguration.Increment == IncrementStrategy.Inherit) + { + fallbackConfiguration = parentConfiguration; + } + return new EffectiveConfiguration(configuration, branchConfiguration, fallbackConfiguration); + } + + public static IBranchConfiguration GetBranchConfiguration(this IGitVersionConfiguration configuration, IBranch branch) + => GetBranchConfiguration(configuration, branch.NotNull().Name); + + public static IBranchConfiguration GetBranchConfiguration(this IGitVersionConfiguration configuration, ReferenceName branchName) + { + var branchConfiguration = GetBranchConfigurations(configuration, branchName.WithoutOrigin).FirstOrDefault(); + branchConfiguration ??= configuration.GetEmptyBranchConfiguration(); + return branchConfiguration; + } + + public static IEnumerable ToFilters(this IIgnoreConfiguration source) + { + source.NotNull(); + + if (source.Shas.Count != 0) yield return new ShaVersionFilter(source.Shas); + if (source.Before.HasValue) yield return new MinDateVersionFilter(source.Before.Value); + } + + private static IEnumerable GetBranchConfigurations(IGitVersionConfiguration configuration, string branchName) + { + IBranchConfiguration? unknownBranchConfiguration = null; + foreach ((string key, IBranchConfiguration branchConfiguration) in configuration.Branches) + { + if (branchConfiguration.IsMatch(branchName)) + { + if (key == "unknown") + { + unknownBranchConfiguration = branchConfiguration; + } + else + { + yield return branchConfiguration; + } + } + } + + if (unknownBranchConfiguration != null) yield return unknownBranchConfiguration; + } + + public static IBranchConfiguration GetFallbackBranchConfiguration(this IGitVersionConfiguration configuration) => configuration; + + public static bool IsReleaseBranch(this IGitVersionConfiguration configuration, IBranch branch) + => IsReleaseBranch(configuration, branch.NotNull().Name); + + public static bool IsReleaseBranch(this IGitVersionConfiguration configuration, ReferenceName branchName) + => configuration.GetBranchConfiguration(branchName).IsReleaseBranch ?? false; + + public static string? GetBranchSpecificLabel( + this EffectiveConfiguration configuration, ReferenceName branchName, string? branchNameOverride) + => GetBranchSpecificLabel(configuration, branchName.WithoutOrigin, branchNameOverride); + + public static string? GetBranchSpecificLabel( + this EffectiveConfiguration configuration, string? branchName, string? branchNameOverride) + { + configuration.NotNull(); + + var label = configuration.Label; + if (label is null) + { + return label; + } + + var effectiveBranchName = branchNameOverride ?? branchName; + + if (!configuration.RegularExpression.IsNullOrWhiteSpace() && !effectiveBranchName.IsNullOrEmpty()) + { + effectiveBranchName = effectiveBranchName.RegexReplace("[^a-zA-Z0-9-_]", "-"); + var pattern = new Regex(configuration.RegularExpression, RegexOptions.IgnoreCase); + var match = pattern.Match(effectiveBranchName); + if (match.Success) + { + // ReSharper disable once LoopCanBeConvertedToQuery + foreach (var groupName in pattern.GetGroupNames()) + { + label = label.Replace("{" + groupName + "}", match.Groups[groupName].Value); + } + } + } + + // Evaluate tag number pattern and append to prerelease tag, preserving build metadata + if (!configuration.LabelNumberPattern.IsNullOrEmpty() && !effectiveBranchName.IsNullOrEmpty()) + { + var match = Regex.Match(effectiveBranchName, configuration.LabelNumberPattern); + var numberGroup = match.Groups["number"]; + if (numberGroup.Success) + { + label += numberGroup.Value; + } + } + + return label; + } + + public static (string GitDirectory, string WorkingTreeDirectory)? FindGitDir(this string path) + { + string? startingDir = path; + while (startingDir is not null) + { + var dirOrFilePath = PathHelper.Combine(startingDir, ".git"); + if (Directory.Exists(dirOrFilePath)) + { + return (dirOrFilePath, Path.GetDirectoryName(dirOrFilePath)!); + } + + if (File.Exists(dirOrFilePath)) + { + string? relativeGitDirPath = ReadGitDirFromFile(dirOrFilePath); + if (!string.IsNullOrWhiteSpace(relativeGitDirPath)) + { + var fullGitDirPath = Path.GetFullPath(PathHelper.Combine(startingDir, relativeGitDirPath)); + if (Directory.Exists(fullGitDirPath)) + { + return (fullGitDirPath, Path.GetDirectoryName(dirOrFilePath)!); + } + } + } + + startingDir = Path.GetDirectoryName(startingDir); + } + + return null; + } + + private static string? ReadGitDirFromFile(string fileName) + { + const string expectedPrefix = "gitdir: "; + var firstLineOfFile = File.ReadLines(fileName).FirstOrDefault(); + if (firstLineOfFile?.StartsWith(expectedPrefix) ?? false) + { + return firstLineOfFile[expectedPrefix.Length..]; // strip off the prefix, leaving just the path + } + + return null; + } +} diff --git a/src/GitVersion.Core/Extensions/DictionaryExtensions.cs b/src/GitVersion.Core/Extensions/DictionaryExtensions.cs index ade4ffb7c6..7a1ab3723c 100644 --- a/src/GitVersion.Core/Extensions/DictionaryExtensions.cs +++ b/src/GitVersion.Core/Extensions/DictionaryExtensions.cs @@ -6,7 +6,8 @@ public static TValue GetOrAdd(this IDictionary dict, { if (dict is null) throw new ArgumentNullException(nameof(dict)); if (getValue is null) throw new ArgumentNullException(nameof(getValue)); - if (!dict.TryGetValue(key, out TValue value)) + + if (!dict.TryGetValue(key, out var value)) { value = getValue(); dict.Add(key, value); diff --git a/src/GitVersion.Core/Extensions/EnumerableExtensions.cs b/src/GitVersion.Core/Extensions/EnumerableExtensions.cs index 33abab23d1..085de0f618 100644 --- a/src/GitVersion.Core/Extensions/EnumerableExtensions.cs +++ b/src/GitVersion.Core/Extensions/EnumerableExtensions.cs @@ -18,4 +18,24 @@ public static class EnumerableExtensions var current = e.Current; return !e.MoveNext() ? current : default; } + + public static T SingleOfType(this IEnumerable source) + { + if (source == null) + { + throw new ArgumentNullException(nameof(source)); + } + + return source.OfType().Single(); + } + + public static void AddRange(this ICollection source, IEnumerable items) + { + source.NotNull(); + + foreach (var item in items.NotNull()) + { + source.Add(item); + } + } } diff --git a/src/GitVersion.Core/Extensions/GitExtensions.cs b/src/GitVersion.Core/Extensions/GitExtensions.cs index e17bee2207..84f3e74768 100644 --- a/src/GitVersion.Core/Extensions/GitExtensions.cs +++ b/src/GitVersion.Core/Extensions/GitExtensions.cs @@ -17,13 +17,8 @@ public static void DumpGraph(string workingDirectory, Action? writer = n CreateGitLogArgs(maxCommits), workingDirectory); } - catch (FileNotFoundException exception) + catch (FileNotFoundException exception) when (exception.FileName == "git") { - if (exception.FileName != "git") - { - throw; - } - output.AppendLine("Could not execute 'git log' due to the following error:"); output.AppendLine(exception.ToString()); } diff --git a/src/GitVersion.Core/Extensions/IncrementStrategyExtensions.cs b/src/GitVersion.Core/Extensions/IncrementStrategyExtensions.cs new file mode 100644 index 0000000000..eb84a57dce --- /dev/null +++ b/src/GitVersion.Core/Extensions/IncrementStrategyExtensions.cs @@ -0,0 +1,13 @@ +namespace GitVersion.Extensions; + +public static class IncrementStrategyExtensions +{ + public static VersionField ToVersionField(this IncrementStrategy strategy) => strategy switch + { + IncrementStrategy.None => VersionField.None, + IncrementStrategy.Major => VersionField.Major, + IncrementStrategy.Minor => VersionField.Minor, + IncrementStrategy.Patch => VersionField.Patch, + _ => throw new ArgumentOutOfRangeException(nameof(strategy), strategy, null) + }; +} diff --git a/src/GitVersion.Core/Extensions/NullableAttributes.cs b/src/GitVersion.Core/Extensions/NullableAttributes.cs deleted file mode 100644 index 65c7bebbb1..0000000000 --- a/src/GitVersion.Core/Extensions/NullableAttributes.cs +++ /dev/null @@ -1,147 +0,0 @@ -// This was copied from https://github.com/dotnet/coreclr/blob/60f1e6265bd1039f023a82e0643b524d6aaf7845/src/System.Private.CoreLib/shared/System/Diagnostics/CodeAnalysis/NullableAttributes.cs -// and updated to have the scope of the attributes be internal. - -#pragma warning disable CA1019 // Define accessors for attribute arguments - -namespace System.Diagnostics.CodeAnalysis; -#if !NETCOREAPP - -/// Specifies that null is allowed as an input even if the corresponding type disallows it. -[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property)] -internal sealed class AllowNullAttribute : Attribute { } - -/// Specifies that null is disallowed as an input even if the corresponding type allows it. -[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property)] -internal sealed class DisallowNullAttribute : Attribute { } - -/// Specifies that an output may be null even if the corresponding type disallows it. -[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue)] -internal sealed class MaybeNullAttribute : Attribute { } - -/// Specifies that an output will not be null even if the corresponding type allows it. -[AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue)] -internal sealed class NotNullAttribute : Attribute { } - -/// Specifies that when a method returns , the parameter may be null even if the corresponding type disallows it. -[AttributeUsage(AttributeTargets.Parameter)] -internal sealed class MaybeNullWhenAttribute : Attribute -{ - /// Initializes the attribute with the specified return value condition. - /// - /// The return value condition. If the method returns this value, the associated parameter may be null. - /// - public MaybeNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; - - /// Gets the return value condition. - public bool ReturnValue { get; } -} - -/// Specifies that when a method returns , the parameter will not be null even if the corresponding type allows it. -[AttributeUsage(AttributeTargets.Parameter)] -internal sealed class NotNullWhenAttribute : Attribute -{ - /// Initializes the attribute with the specified return value condition. - /// - /// The return value condition. If the method returns this value, the associated parameter will not be null. - /// - public NotNullWhenAttribute(bool returnValue) => ReturnValue = returnValue; - - /// Gets the return value condition. - public bool ReturnValue { get; } -} - -/// Specifies that the output will be non-null if the named parameter is non-null. -[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property | AttributeTargets.ReturnValue, AllowMultiple = true)] -internal sealed class NotNullIfNotNullAttribute : Attribute -{ - /// Initializes the attribute with the associated parameter name. - /// - /// The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null. - /// - public NotNullIfNotNullAttribute(string parameterName) => ParameterName = parameterName; - - /// Gets the associated parameter name. - public string ParameterName { get; } -} - -/// Applied to a method that will never return under any circumstance. -[AttributeUsage(AttributeTargets.Method, Inherited = false)] -internal sealed class DoesNotReturnAttribute : Attribute { } - -/// Specifies that the method will not return if the associated Boolean parameter is passed the specified value. -[AttributeUsage(AttributeTargets.Parameter)] -internal sealed class DoesNotReturnIfAttribute : Attribute -{ - /// Initializes the attribute with the specified parameter value. - /// - /// The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to - /// the associated parameter matches this value. - /// - public DoesNotReturnIfAttribute(bool parameterValue) => ParameterValue = parameterValue; - - /// Gets the condition parameter value. - public bool ParameterValue { get; } -} - -#endif - -#if !NETCOREAPP || NETCOREAPP3_1 - -/// Specifies that the method or property will ensure that the listed field and property members have not-null values. -[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] -internal sealed class MemberNotNullAttribute : Attribute -{ - /// Initializes the attribute with a field or property member. - /// - /// The field or property member that is promised to be not-null. - /// - public MemberNotNullAttribute(string member) => Members = new[] { member }; - - /// Initializes the attribute with the list of field and property members. - /// - /// The list of field and property members that are promised to be not-null. - /// - public MemberNotNullAttribute(params string[] members) => Members = members; - - /// Gets field or property member names. - public string[] Members { get; } -} - -/// Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition. -[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)] -internal sealed class MemberNotNullWhenAttribute : Attribute -{ - /// Initializes the attribute with the specified return value condition and a field or property member. - /// - /// The return value condition. If the method returns this value, the associated parameter will not be null. - /// - /// - /// The field or property member that is promised to be not-null. - /// - public MemberNotNullWhenAttribute(bool returnValue, string member) - { - ReturnValue = returnValue; - Members = new[] { member }; - } - - /// Initializes the attribute with the specified return value condition and list of field and property members. - /// - /// The return value condition. If the method returns this value, the associated parameter will not be null. - /// - /// - /// The list of field and property members that are promised to be not-null. - /// - public MemberNotNullWhenAttribute(bool returnValue, params string[] members) - { - ReturnValue = returnValue; - Members = members; - } - - /// Gets the return value condition. - public bool ReturnValue { get; } - - /// Gets field or property member names. - public string[] Members { get; } -} - -#endif diff --git a/src/GitVersion.Core/Extensions/ObjectExtensions.cs b/src/GitVersion.Core/Extensions/ObjectExtensions.cs deleted file mode 100644 index 85857a6ef0..0000000000 --- a/src/GitVersion.Core/Extensions/ObjectExtensions.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace GitVersion.Extensions; - -public static class ObjectExtensions -{ - [AttributeUsage(AttributeTargets.Field | AttributeTargets.Parameter | AttributeTargets.Property)] - internal sealed class ReflectionIgnoreAttribute : Attribute - { - } - - public static void Deconstruct( - this KeyValuePair kvp, - out TKey key, - out TValue value) - { - key = kvp.Key; - value = kvp.Value; - } - - public static IEnumerable> GetProperties(this object obj) - { - var type = typeof(string); - return obj.GetType().GetProperties() - .Where(p => p.PropertyType == type && !p.GetIndexParameters().Any() && !p.GetCustomAttributes(typeof(ReflectionIgnoreAttribute), false).Any()) - .Select(p => new KeyValuePair(p.Name, (string)p.GetValue(obj, null))); - } -} diff --git a/src/GitVersion.Core/Extensions/ReadEmbeddedResourceExtensions.cs b/src/GitVersion.Core/Extensions/ReadEmbeddedResourceExtensions.cs index 3659c7e427..95391be84d 100644 --- a/src/GitVersion.Core/Extensions/ReadEmbeddedResourceExtensions.cs +++ b/src/GitVersion.Core/Extensions/ReadEmbeddedResourceExtensions.cs @@ -2,23 +2,21 @@ namespace GitVersion.Extensions; public static class ReadEmbeddedResourceExtensions { - /// - /// - /// - /// - /// Should include Namespace separated path to resource in assembly referenced by - /// public static string ReadAsStringFromEmbeddedResource(this string resourceName) + => ReadAsStringFromEmbeddedResource(resourceName, typeof(T).Assembly); + + public static string ReadAsStringFromEmbeddedResource(this string resourceName, Assembly assembly) { - using var stream = resourceName.ReadFromEmbeddedResource(); - using var rdr = new StreamReader(stream); - return rdr.ReadToEnd(); + using var stream = resourceName.ReadFromEmbeddedResource(assembly); + using var streamReader = new StreamReader(stream); + return streamReader.ReadToEnd(); } - private static Stream ReadFromEmbeddedResource(this string resourceName) + private static Stream ReadFromEmbeddedResource(this string resourceName, Assembly assembly) { - var assembly = typeof(T).Assembly; + assembly.NotNull(); - return assembly?.GetManifestResourceStream(resourceName) ?? throw new InvalidOperationException($"Could not find embedded resource {resourceName}"); + return assembly.GetManifestResourceStream(resourceName) + ?? throw new InvalidOperationException($"Could not find embedded resource {resourceName}"); } } diff --git a/src/GitVersion.Core/Extensions/ServiceCollectionExtensions.cs b/src/GitVersion.Core/Extensions/ServiceCollectionExtensions.cs index d4d6467f3d..153bf20e53 100644 --- a/src/GitVersion.Core/Extensions/ServiceCollectionExtensions.cs +++ b/src/GitVersion.Core/Extensions/ServiceCollectionExtensions.cs @@ -11,5 +11,5 @@ public static IServiceCollection AddModule(this IServiceCollection serviceCollec } public static TService GetServiceForType(this IServiceProvider serviceProvider) => - serviceProvider.GetServices().SingleOrDefault(t => t?.GetType() == typeof(TType)); + serviceProvider.GetServices().Single(t => t?.GetType() == typeof(TType)); } diff --git a/src/GitVersion.Core/Extensions/StringExtensions.cs b/src/GitVersion.Core/Extensions/StringExtensions.cs index a8a19a7a4e..b45126b8c2 100644 --- a/src/GitVersion.Core/Extensions/StringExtensions.cs +++ b/src/GitVersion.Core/Extensions/StringExtensions.cs @@ -1,91 +1,10 @@ using System.Diagnostics.CodeAnalysis; using System.Text.RegularExpressions; -using GitVersion.Helpers; namespace GitVersion.Extensions; public static class StringExtensions { - private static readonly string[] Trues = { "1", "true" }; - private static readonly string[] Falses = { "0", "false" }; - - public static bool IsTrue(this string? value) => Trues.Contains(value, StringComparer.OrdinalIgnoreCase); - - public static bool IsFalse(this string? value) => Falses.Contains(value, StringComparer.OrdinalIgnoreCase); - - public static bool IsValidPath(this string? path) - { - if (path == null) - return false; - - try - { - _ = Path.GetFullPath(path); - } - catch - { - path = PathHelper.Combine(System.Environment.CurrentDirectory, path); - - try - { - _ = Path.GetFullPath(path); - } - catch - { - return false; - } - } - - return Directory.Exists(path); - } - - public static bool IsSwitchArgument(this string? value) => value != null - && (value.StartsWith("-") || value.StartsWith("/")) - && !Regex.Match(value, @"/\w+:").Success; //Exclude msbuild & project parameters in form /blah:, which should be parsed as values, not switch names. - - public static bool IsSwitch(this string? value, string switchName) - { - if (value == null) - return false; - - if (value.StartsWith("-")) - { - value = value.Substring(1); - } - - if (value.StartsWith("/")) - { - value = value.Substring(1); - } - - return string.Equals(switchName, value, StringComparison.OrdinalIgnoreCase); - } - - public static bool IsInit(this string singleArgument) => singleArgument.Equals("init", StringComparison.OrdinalIgnoreCase); - - public static bool IsHelp(this string singleArgument) => (singleArgument == "?") || singleArgument.IsSwitch("h") || singleArgument.IsSwitch("help") || singleArgument.IsSwitch("?"); - - public static bool ArgumentRequiresValue(this string argument, int argumentIndex) - { - var booleanArguments = new[] - { - "init", - "updateassemblyinfo", - "ensureassemblyinfo", - "nofetch", - "nonormalize", - "nocache" - }; - - var argumentMightRequireValue = !booleanArguments.Contains(argument.Substring(1), StringComparer.OrdinalIgnoreCase); - - // If this is the first argument that might be a target path, the argument starts with slash and we're on an OS that supports paths with slashes, the argument does not require a value. - if (argumentMightRequireValue && argumentIndex == 0 && argument.StartsWith("/") && Path.DirectorySeparatorChar == '/' && argument.IsValidPath()) - return false; - - return argumentMightRequireValue; - } - public static void AppendLineFormat(this StringBuilder stringBuilder, string format, params object[] args) { stringBuilder.AppendFormat(format, args); @@ -104,4 +23,7 @@ public static bool IsEquivalentTo(this string self, string? other) => public static bool IsNullOrWhiteSpace([NotNullWhen(false)] this string? value) => string.IsNullOrWhiteSpace(value); public static bool IsEmpty([NotNullWhen(false)] this string? value) => string.Empty.Equals(value); + + public static string WithPrefixIfNotNullOrEmpty(this string value, string prefix) + => string.IsNullOrEmpty(value) ? value : prefix + value; } diff --git a/src/GitVersion.Core/Extensions/VersionFieldExtensions.cs b/src/GitVersion.Core/Extensions/VersionFieldExtensions.cs new file mode 100644 index 0000000000..cf5f9c6d66 --- /dev/null +++ b/src/GitVersion.Core/Extensions/VersionFieldExtensions.cs @@ -0,0 +1,14 @@ +namespace GitVersion.Extensions; + +internal static class VersionFieldExtensions +{ + public static VersionField Consolidate(this VersionField source, VersionField? item, params VersionField?[] items) + { + VersionField result = source; + foreach (VersionField? increment in new[] { item }.Concat(items)) + { + if (result < increment) result = increment.Value; + } + return result; + } +} diff --git a/src/GitVersion.Core/Model/AuthenticationInfo.cs b/src/GitVersion.Core/Git/AuthenticationInfo.cs similarity index 68% rename from src/GitVersion.Core/Model/AuthenticationInfo.cs rename to src/GitVersion.Core/Git/AuthenticationInfo.cs index 46cca8efd5..24d6798735 100644 --- a/src/GitVersion.Core/Model/AuthenticationInfo.cs +++ b/src/GitVersion.Core/Git/AuthenticationInfo.cs @@ -1,6 +1,6 @@ -namespace GitVersion; +namespace GitVersion.Git; -public class AuthenticationInfo +public record AuthenticationInfo { public string? Username { get; set; } public string? Password { get; set; } diff --git a/src/GitVersion.Core/Model/BranchCommit.cs b/src/GitVersion.Core/Git/BranchCommit.cs similarity index 64% rename from src/GitVersion.Core/Model/BranchCommit.cs rename to src/GitVersion.Core/Git/BranchCommit.cs index 84e533a122..ccc926033a 100644 --- a/src/GitVersion.Core/Model/BranchCommit.cs +++ b/src/GitVersion.Core/Git/BranchCommit.cs @@ -1,22 +1,17 @@ using GitVersion.Extensions; -namespace GitVersion; +namespace GitVersion.Git; /// /// A commit, together with the branch to which the commit belongs. /// -public readonly struct BranchCommit : IEquatable +[DebuggerDisplay("{Branch} {Commit}")] +public readonly struct BranchCommit(ICommit commit, IBranch branch) : IEquatable { public static readonly BranchCommit Empty = new(); - public BranchCommit(ICommit commit, IBranch branch) : this() - { - Branch = branch.NotNull(); - Commit = commit.NotNull(); - } - - public IBranch Branch { get; } - public ICommit Commit { get; } + public IBranch Branch { get; } = branch.NotNull(); + public ICommit Commit { get; } = commit.NotNull(); public bool Equals(BranchCommit? other) { @@ -32,7 +27,7 @@ public override int GetHashCode() { unchecked { - return ((Branch != null ? Branch.GetHashCode() : 0) * 397) ^ (Commit != null ? Commit.GetHashCode() : 0); + return ((Branch?.GetHashCode()) ?? 0) * 397 ^ ((Commit?.GetHashCode()) ?? 0); } } diff --git a/src/GitVersion.Core/Git/CommitExtensions.cs b/src/GitVersion.Core/Git/CommitExtensions.cs new file mode 100644 index 0000000000..9b8971ac54 --- /dev/null +++ b/src/GitVersion.Core/Git/CommitExtensions.cs @@ -0,0 +1,8 @@ +using GitVersion.Extensions; + +namespace GitVersion.Git; + +public static class CommitExtensions +{ + public static bool IsMergeCommit(this ICommit source) => source.NotNull().Parents.Count >= 2; +} diff --git a/src/GitVersion.Core/Git/CommitFilter.cs b/src/GitVersion.Core/Git/CommitFilter.cs index cb1972d8f4..074f7d67d4 100644 --- a/src/GitVersion.Core/Git/CommitFilter.cs +++ b/src/GitVersion.Core/Git/CommitFilter.cs @@ -1,12 +1,11 @@ -namespace GitVersion; +namespace GitVersion.Git; -public class CommitFilter +public record CommitFilter { - - public bool FirstParentOnly { get; set; } - public object? IncludeReachableFrom { get; set; } - public object? ExcludeReachableFrom { get; set; } - public CommitSortStrategies SortBy { get; set; } + public bool FirstParentOnly { get; init; } + public object? IncludeReachableFrom { get; init; } + public object? ExcludeReachableFrom { get; init; } + public CommitSortStrategies SortBy { get; init; } } [Flags] diff --git a/src/GitVersion.Core/Git/IBranch.cs b/src/GitVersion.Core/Git/IBranch.cs index cb7f0f2f87..4c78171180 100644 --- a/src/GitVersion.Core/Git/IBranch.cs +++ b/src/GitVersion.Core/Git/IBranch.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IBranch : IEquatable, IComparable, INamedReference { @@ -6,5 +6,5 @@ public interface IBranch : IEquatable, IComparable, INamedRef bool IsRemote { get; } bool IsTracking { get; } bool IsDetachedHead { get; } - ICommitCollection? Commits { get; } + ICommitCollection Commits { get; } } diff --git a/src/GitVersion.Core/Git/IBranchCollection.cs b/src/GitVersion.Core/Git/IBranchCollection.cs index ffb86439ad..5943bdf7d8 100644 --- a/src/GitVersion.Core/Git/IBranchCollection.cs +++ b/src/GitVersion.Core/Git/IBranchCollection.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IBranchCollection : IEnumerable { diff --git a/src/GitVersion.Core/Git/ICommit.cs b/src/GitVersion.Core/Git/ICommit.cs index d9f27390fe..6d54ecb78d 100644 --- a/src/GitVersion.Core/Git/ICommit.cs +++ b/src/GitVersion.Core/Git/ICommit.cs @@ -1,8 +1,10 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface ICommit : IEquatable, IComparable, IGitObject { - IEnumerable Parents { get; } + IReadOnlyList Parents { get; } + DateTimeOffset When { get; } + string Message { get; } } diff --git a/src/GitVersion.Core/Git/ICommitCollection.cs b/src/GitVersion.Core/Git/ICommitCollection.cs index 10d9723156..8bf6267f37 100644 --- a/src/GitVersion.Core/Git/ICommitCollection.cs +++ b/src/GitVersion.Core/Git/ICommitCollection.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface ICommitCollection : IEnumerable { diff --git a/src/GitVersion.Core/Git/IGitObject.cs b/src/GitVersion.Core/Git/IGitObject.cs index d125066ad7..1965547a30 100644 --- a/src/GitVersion.Core/Git/IGitObject.cs +++ b/src/GitVersion.Core/Git/IGitObject.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IGitObject : IEquatable, IComparable { diff --git a/src/GitVersion.Core/Git/IGitRepository.cs b/src/GitVersion.Core/Git/IGitRepository.cs index 5b2a1aa8fd..9f25193b0d 100644 --- a/src/GitVersion.Core/Git/IGitRepository.cs +++ b/src/GitVersion.Core/Git/IGitRepository.cs @@ -1,10 +1,11 @@ -namespace GitVersion; +namespace GitVersion.Git; -public interface IGitRepository +public interface IGitRepository : IDisposable { string Path { get; } string WorkingDirectory { get; } bool IsHeadDetached { get; } + bool IsShallow { get; } IBranch Head { get; } ITagCollection Tags { get; } IReferenceCollection Refs { get; } @@ -14,4 +15,5 @@ public interface IGitRepository ICommit? FindMergeBase(ICommit commit, ICommit otherCommit); int GetNumberOfUncommittedChanges(); + void DiscoverRepository(string? gitDirectory); } diff --git a/src/GitVersion.Core/Git/IGitRepositoryInfo.cs b/src/GitVersion.Core/Git/IGitRepositoryInfo.cs index 4e39080ee1..4aff8edd97 100644 --- a/src/GitVersion.Core/Git/IGitRepositoryInfo.cs +++ b/src/GitVersion.Core/Git/IGitRepositoryInfo.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IGitRepositoryInfo { diff --git a/src/GitVersion.Core/Git/IMutatingGitRepository.cs b/src/GitVersion.Core/Git/IMutatingGitRepository.cs index 3924c4326e..b7dc7bf811 100644 --- a/src/GitVersion.Core/Git/IMutatingGitRepository.cs +++ b/src/GitVersion.Core/Git/IMutatingGitRepository.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IMutatingGitRepository : IGitRepository { diff --git a/src/GitVersion.Core/Git/INamedReference.cs b/src/GitVersion.Core/Git/INamedReference.cs index a138984514..2c41175783 100644 --- a/src/GitVersion.Core/Git/INamedReference.cs +++ b/src/GitVersion.Core/Git/INamedReference.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface INamedReference { diff --git a/src/GitVersion.Core/Git/IObjectId.cs b/src/GitVersion.Core/Git/IObjectId.cs index 1140e04f1f..b303cc953d 100644 --- a/src/GitVersion.Core/Git/IObjectId.cs +++ b/src/GitVersion.Core/Git/IObjectId.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IObjectId : IEquatable, IComparable { diff --git a/src/GitVersion.Core/Git/IRefSpec.cs b/src/GitVersion.Core/Git/IRefSpec.cs index d21969e32a..777641c1b4 100644 --- a/src/GitVersion.Core/Git/IRefSpec.cs +++ b/src/GitVersion.Core/Git/IRefSpec.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IRefSpec : IEquatable, IComparable { diff --git a/src/GitVersion.Core/Git/IRefSpecCollection.cs b/src/GitVersion.Core/Git/IRefSpecCollection.cs index 3ff492c0a3..d007874d8c 100644 --- a/src/GitVersion.Core/Git/IRefSpecCollection.cs +++ b/src/GitVersion.Core/Git/IRefSpecCollection.cs @@ -1,5 +1,3 @@ -namespace GitVersion; +namespace GitVersion.Git; -public interface IRefSpecCollection : IEnumerable -{ -} +public interface IRefSpecCollection : IEnumerable; diff --git a/src/GitVersion.Core/Git/IReference.cs b/src/GitVersion.Core/Git/IReference.cs index 7cb6132d1d..6b560af39b 100644 --- a/src/GitVersion.Core/Git/IReference.cs +++ b/src/GitVersion.Core/Git/IReference.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IReference : IEquatable, IComparable, INamedReference { diff --git a/src/GitVersion.Core/Git/IReferenceCollection.cs b/src/GitVersion.Core/Git/IReferenceCollection.cs index e3aafe1d50..6b4f639386 100644 --- a/src/GitVersion.Core/Git/IReferenceCollection.cs +++ b/src/GitVersion.Core/Git/IReferenceCollection.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IReferenceCollection : IEnumerable { diff --git a/src/GitVersion.Core/Git/IRemote.cs b/src/GitVersion.Core/Git/IRemote.cs index 896b3edfda..53b51eaad0 100644 --- a/src/GitVersion.Core/Git/IRemote.cs +++ b/src/GitVersion.Core/Git/IRemote.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IRemote : IEquatable, IComparable { diff --git a/src/GitVersion.Core/Git/IRemoteCollection.cs b/src/GitVersion.Core/Git/IRemoteCollection.cs index 614177ac81..531eee8546 100644 --- a/src/GitVersion.Core/Git/IRemoteCollection.cs +++ b/src/GitVersion.Core/Git/IRemoteCollection.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface IRemoteCollection : IEnumerable { diff --git a/src/GitVersion.Core/Git/ITag.cs b/src/GitVersion.Core/Git/ITag.cs index adf08a549f..c37dec97f4 100644 --- a/src/GitVersion.Core/Git/ITag.cs +++ b/src/GitVersion.Core/Git/ITag.cs @@ -1,7 +1,8 @@ -namespace GitVersion; +namespace GitVersion.Git; public interface ITag : IEquatable, IComparable, INamedReference { - string? TargetSha { get; } - ICommit? PeeledTargetCommit(); + string TargetSha { get; } + + ICommit Commit { get; } } diff --git a/src/GitVersion.Core/Git/ITagCollection.cs b/src/GitVersion.Core/Git/ITagCollection.cs index c5e189c6b5..3065430e39 100644 --- a/src/GitVersion.Core/Git/ITagCollection.cs +++ b/src/GitVersion.Core/Git/ITagCollection.cs @@ -1,5 +1,3 @@ -namespace GitVersion; +namespace GitVersion.Git; -public interface ITagCollection : IEnumerable -{ -} +public interface ITagCollection : IEnumerable; diff --git a/src/GitVersion.Core/Git/RefSpecDirection.cs b/src/GitVersion.Core/Git/RefSpecDirection.cs index 9cca4404f6..97070104f8 100644 --- a/src/GitVersion.Core/Git/RefSpecDirection.cs +++ b/src/GitVersion.Core/Git/RefSpecDirection.cs @@ -1,4 +1,4 @@ -namespace GitVersion; +namespace GitVersion.Git; public enum RefSpecDirection { diff --git a/src/GitVersion.Core/Git/ReferenceName.cs b/src/GitVersion.Core/Git/ReferenceName.cs index 6787705285..bb86f2d09e 100644 --- a/src/GitVersion.Core/Git/ReferenceName.cs +++ b/src/GitVersion.Core/Git/ReferenceName.cs @@ -1,93 +1,148 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; public class ReferenceName : IEquatable, IComparable { private static readonly LambdaEqualityHelper equalityHelper = new(x => x.Canonical); private static readonly LambdaKeyComparer comparerHelper = new(x => x.Canonical); - private const string LocalBranchPrefix = "refs/heads/"; - private const string RemoteTrackingBranchPrefix = "refs/remotes/"; + public const string LocalBranchPrefix = "refs/heads/"; + public const string RemoteTrackingBranchPrefix = "refs/remotes/"; private const string TagPrefix = "refs/tags/"; + private const string OriginPrefix = "origin/"; + private static readonly string[] PullRequestPrefixes = - { + [ "refs/pull/", "refs/pull-requests/", "refs/remotes/pull/", "refs/remotes/pull-requests/" - }; + ]; public ReferenceName(string canonical) { Canonical = canonical.NotNull(); - IsBranch = IsPrefixedBy(Canonical, LocalBranchPrefix); + IsLocalBranch = IsPrefixedBy(Canonical, LocalBranchPrefix); IsRemoteBranch = IsPrefixedBy(Canonical, RemoteTrackingBranchPrefix); IsTag = IsPrefixedBy(Canonical, TagPrefix); IsPullRequest = IsPrefixedBy(Canonical, PullRequestPrefixes); Friendly = Shorten(); - WithoutRemote = RemoveRemote(); + WithoutOrigin = RemoveOrigin(); } public static ReferenceName Parse(string canonicalName) { + if (TryParse(out ReferenceName? value, canonicalName)) return value; + throw new ArgumentException($"The {nameof(canonicalName)} is not a Canonical name"); + } + + public static bool TryParse([NotNullWhen(true)] out ReferenceName? value, string canonicalName) + { + value = null; + if (IsPrefixedBy(canonicalName, LocalBranchPrefix) || IsPrefixedBy(canonicalName, RemoteTrackingBranchPrefix) || IsPrefixedBy(canonicalName, TagPrefix) || IsPrefixedBy(canonicalName, PullRequestPrefixes)) { - return new ReferenceName(canonicalName); + value = new(canonicalName); } - throw new ArgumentException($"The {nameof(canonicalName)} is not a Canonical name"); + return value is not null; } - public static ReferenceName FromBranchName(string branchName) => Parse(LocalBranchPrefix + branchName); + public static ReferenceName FromBranchName(string branchName) + { + if (TryParse(out ReferenceName? value, branchName)) return value; + return Parse(LocalBranchPrefix + branchName); + } public string Canonical { get; } public string Friendly { get; } - public string WithoutRemote { get; } - public bool IsBranch { get; } + public string WithoutOrigin { get; } + public bool IsLocalBranch { get; } public bool IsRemoteBranch { get; } public bool IsTag { get; } public bool IsPullRequest { get; } public bool Equals(ReferenceName? other) => equalityHelper.Equals(this, other); - public int CompareTo(ReferenceName other) => comparerHelper.Compare(this, other); - public override bool Equals(object obj) => Equals((obj as ReferenceName)); + public int CompareTo(ReferenceName? other) => comparerHelper.Compare(this, other); + public override bool Equals(object? obj) => Equals(obj as ReferenceName); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Friendly; + public static bool operator ==(ReferenceName? left, ReferenceName? right) + { + if (ReferenceEquals(left, right)) return true; + if (left is null || right is null) return false; + return left.Equals(right); + } + + public static bool operator !=(ReferenceName? left, ReferenceName? right) => !(left == right); + + public bool TryGetSemanticVersion(out (SemanticVersion Value, string? Name) result, + Regex versionPatternRegex, + string? tagPrefix, + SemanticVersionFormat format) + { + result = default; + + int length = 0; + foreach (var branchPart in WithoutOrigin.Split(GetBranchSeparator())) + { + if (string.IsNullOrEmpty(branchPart)) return false; + + var match = versionPatternRegex.NotNull().Match(branchPart); + if (match.Success) + { + var versionPart = match.Groups["version"].Value; + if (SemanticVersion.TryParse(versionPart, tagPrefix, out var semanticVersion, format)) + { + length += versionPart.Length; + var name = WithoutOrigin[length..].Trim('-'); + result = new(semanticVersion, name == string.Empty ? null : name); + return true; + } + } + length += branchPart.Length + 1; + } + + return false; + } + + private char GetBranchSeparator() => WithoutOrigin.Contains('/') || !WithoutOrigin.Contains('-') ? '/' : '-'; + public bool EquivalentTo(string? name) => Canonical.Equals(name, StringComparison.OrdinalIgnoreCase) || Friendly.Equals(name, StringComparison.OrdinalIgnoreCase) - || WithoutRemote.Equals(name, StringComparison.OrdinalIgnoreCase); + || WithoutOrigin.Equals(name, StringComparison.OrdinalIgnoreCase); private string Shorten() { - if (IsBranch) - return Canonical.Substring(LocalBranchPrefix.Length); + if (IsLocalBranch) + return Canonical[LocalBranchPrefix.Length..]; if (IsRemoteBranch) - return Canonical.Substring(RemoteTrackingBranchPrefix.Length); + return Canonical[RemoteTrackingBranchPrefix.Length..]; if (IsTag) - return Canonical.Substring(TagPrefix.Length); + return Canonical[TagPrefix.Length..]; return Canonical; } - private string RemoveRemote() + private string RemoveOrigin() { - if (IsRemoteBranch) + if (IsRemoteBranch && !IsPullRequest && Friendly.StartsWith(OriginPrefix, StringComparison.Ordinal)) { - if (!IsPullRequest) - return Friendly.Substring(Friendly.IndexOf("/", StringComparison.Ordinal) + 1); + return Friendly[OriginPrefix.Length..]; } - return Friendly; } diff --git a/src/GitVersion.Core/GitVersion.Core.csproj b/src/GitVersion.Core/GitVersion.Core.csproj index 45819f607e..a11a076110 100644 --- a/src/GitVersion.Core/GitVersion.Core.csproj +++ b/src/GitVersion.Core/GitVersion.Core.csproj @@ -1,7 +1,6 @@ - netstandard2.0 GitVersion bin\$(Configuration)\GitVersionCore.xml @@ -13,29 +12,27 @@ - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - + + + - - + + + + + + + + + + + + + + + diff --git a/src/GitVersion.Core/GitVersionCommonModule.cs b/src/GitVersion.Core/GitVersionCommonModule.cs new file mode 100644 index 0000000000..a4e0b53642 --- /dev/null +++ b/src/GitVersion.Core/GitVersionCommonModule.cs @@ -0,0 +1,20 @@ +using GitVersion.Agents; +using GitVersion.Logging; +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion; + +public class GitVersionCommonModule : IGitVersionModule +{ + public void RegisterTypes(IServiceCollection services) + { + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(sp => sp.GetRequiredService().Resolve()); + } +} diff --git a/src/GitVersion.Core/GitVersionContext.cs b/src/GitVersion.Core/GitVersionContext.cs new file mode 100644 index 0000000000..7264abe4c5 --- /dev/null +++ b/src/GitVersion.Core/GitVersionContext.cs @@ -0,0 +1,31 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion; + +/// +/// Contextual information about where GitVersion is being run +/// +public class GitVersionContext( + IBranch currentBranch, + ICommit currentCommit, + IGitVersionConfiguration configuration, + bool isCurrentCommitTagged, + int numberOfUncommittedChanges) +{ + /// + /// Contains the raw configuration, use Configuration for specific configuration based on the current GitVersion context. + /// + public IGitVersionConfiguration Configuration { get; } = configuration.NotNull(); + + public IBranch CurrentBranch { get; } = currentBranch.NotNull(); + + public IEnumerable CurrentBranchCommits => CurrentBranch.Commits.GetCommitsPriorTo(CurrentCommit.When); + + public ICommit CurrentCommit { get; } = currentCommit.NotNull(); + + public bool IsCurrentCommitTagged { get; } = isCurrentCommitTagged; + + public int NumberOfUncommittedChanges { get; } = numberOfUncommittedChanges; +} diff --git a/src/GitVersion.Core/GitVersionCoreModule.cs b/src/GitVersion.Core/GitVersionCoreModule.cs index e7594cf1a0..78be8603d6 100644 --- a/src/GitVersion.Core/GitVersionCoreModule.cs +++ b/src/GitVersion.Core/GitVersionCoreModule.cs @@ -1,11 +1,8 @@ -using GitVersion.BuildAgents; using GitVersion.Common; -using GitVersion.Configuration; +using GitVersion.Core; using GitVersion.Extensions; -using GitVersion.Logging; using GitVersion.VersionCalculation; -using GitVersion.VersionCalculation.Cache; -using GitVersion.VersionConverters; +using GitVersion.VersionCalculation.Caching; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; @@ -15,19 +12,15 @@ public class GitVersionCoreModule : IGitVersionModule { public void RegisterTypes(IServiceCollection services) { - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - - services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); - services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(sp => @@ -37,9 +30,7 @@ public void RegisterTypes(IServiceCollection services) return new Lazy(() => contextFactory.Create(options.Value)); }); - services.AddModule(new BuildServerModule()); - services.AddModule(new ConfigurationModule()); + services.AddModule(new GitVersionCommonModule()); services.AddModule(new VersionCalculationModule()); - services.AddModule(new VersionConvertersModule()); } } diff --git a/src/GitVersion.Core/Helpers/Disposable.cs b/src/GitVersion.Core/Helpers/Disposable.cs new file mode 100644 index 0000000000..f253bef4ef --- /dev/null +++ b/src/GitVersion.Core/Helpers/Disposable.cs @@ -0,0 +1,39 @@ +using GitVersion.Extensions; + +namespace GitVersion.Helpers; + +public static class Disposable +{ + public static IDisposable Create(Action disposer) => new AnonymousDisposable(disposer); + public static IDisposable Create(T value, Action disposer) => new AnonymousDisposable(value, disposer); + + public static readonly IDisposable Empty = Create(() => { }); + + private sealed class AnonymousDisposable(Action disposer) : IDisposable + { + public void Dispose() + { + this.disposer?.Invoke(); + this.disposer = null; + } + + private Action? disposer = disposer.NotNull(); + } + + private sealed class AnonymousDisposable(T value, Action disposer) : IDisposable + { + public void Dispose() + { + this.disposer?.Invoke(); + this.disposer = null; + } + + private Action? disposer = disposer.NotNull(); + public T Value => value; + } +} + +public interface IDisposable : IDisposable +{ + T Value { get; } +} diff --git a/src/GitVersion.Core/Helpers/EncodingHelper.cs b/src/GitVersion.Core/Helpers/EncodingHelper.cs index af71c1f660..8f0e3af85f 100644 --- a/src/GitVersion.Core/Helpers/EncodingHelper.cs +++ b/src/GitVersion.Core/Helpers/EncodingHelper.cs @@ -34,7 +34,7 @@ public static class EncodingHelper var length = stream.Length > maxPreambleLength ? maxPreambleLength : stream.Length; var bytes = new byte[length]; - stream.Read(bytes, 0, (int)length); + _ = stream.Read(bytes, 0, (int)length); return DetectEncoding(bytes); } diff --git a/src/GitVersion.Core/Helpers/LambdaEqualityHelper.cs b/src/GitVersion.Core/Helpers/LambdaEqualityHelper.cs index d8066f6095..37f458c373 100644 --- a/src/GitVersion.Core/Helpers/LambdaEqualityHelper.cs +++ b/src/GitVersion.Core/Helpers/LambdaEqualityHelper.cs @@ -3,13 +3,8 @@ namespace GitVersion.Helpers; // From the LibGit2Sharp project (libgit2sharp.com) // MIT License - Copyright (c) 2011-2014 LibGit2Sharp contributors // see https://github.com/libgit2/libgit2sharp/blob/7af5c60f22f9bd6064204f84467cfa62bedd1147/LibGit2Sharp/Core/LambdaEqualityHelper.cs -public class LambdaEqualityHelper +public class LambdaEqualityHelper(params Func[] equalityContributorAccessors) { - private readonly Func[] equalityContributorAccessors; - - public LambdaEqualityHelper(params Func[] equalityContributorAccessors) => - this.equalityContributorAccessors = equalityContributorAccessors; - public bool Equals(T? instance, T? other) { if (instance is null || other is null) @@ -27,7 +22,7 @@ public bool Equals(T? instance, T? other) return false; } - foreach (var accessor in this.equalityContributorAccessors) + foreach (var accessor in equalityContributorAccessors) { if (!Equals(accessor(instance), accessor(other))) { @@ -44,10 +39,10 @@ public int GetHashCode(T instance) unchecked { - foreach (var accessor in this.equalityContributorAccessors) + foreach (var accessor in equalityContributorAccessors) { var item = accessor(instance); - hashCode = (hashCode * 397) ^ (item != null ? item.GetHashCode() : 0); + hashCode = (hashCode * 397) ^ ((item?.GetHashCode()) ?? 0); } } diff --git a/src/GitVersion.Core/Helpers/LambdaKeyComparer.cs b/src/GitVersion.Core/Helpers/LambdaKeyComparer.cs index a3b2bdf7a8..e5ff678e55 100644 --- a/src/GitVersion.Core/Helpers/LambdaKeyComparer.cs +++ b/src/GitVersion.Core/Helpers/LambdaKeyComparer.cs @@ -1,17 +1,12 @@ namespace GitVersion.Helpers; -public class LambdaKeyComparer : Comparer where TSource : class +public class LambdaKeyComparer( + Func keySelector, + IComparer? innerComparer = null) + : Comparer + where TSource : class { - private readonly Func keySelector; - private readonly IComparer innerComparer; - - public LambdaKeyComparer( - Func keySelector, - IComparer? innerComparer = null) - { - this.keySelector = keySelector; - this.innerComparer = innerComparer ?? Comparer.Default; - } + private readonly IComparer innerComparer = innerComparer ?? Comparer.Default; public override int Compare(TSource? x, TSource? y) { @@ -22,8 +17,8 @@ public override int Compare(TSource? x, TSource? y) if (y == null) return 1; - var xKey = this.keySelector(x); - var yKey = this.keySelector(y); + var xKey = keySelector(x); + var yKey = keySelector(y); return this.innerComparer.Compare(xKey, yKey); } } diff --git a/src/GitVersion.Core/Helpers/PathHelper.cs b/src/GitVersion.Core/Helpers/PathHelper.cs index 4bd92f52f6..b89918ed75 100644 --- a/src/GitVersion.Core/Helpers/PathHelper.cs +++ b/src/GitVersion.Core/Helpers/PathHelper.cs @@ -1,14 +1,38 @@ +using System.Runtime.InteropServices; + namespace GitVersion.Helpers; -public class PathHelper +internal static class PathHelper { + public static string NewLine => SysEnv.NewLine; + + private static readonly StringComparison OsDependentComparison = + RuntimeInformation.IsOSPlatform(OSPlatform.Linux) + ? StringComparison.Ordinal + : StringComparison.OrdinalIgnoreCase; + + public static string GetCurrentDirectory() => AppContext.BaseDirectory ?? throw new InvalidOperationException(); + + public static string GetTempPath() + { + var tempPath = GetCurrentDirectory(); + if (!string.IsNullOrWhiteSpace(SysEnv.GetEnvironmentVariable("RUNNER_TEMP"))) + { + tempPath = SysEnv.GetEnvironmentVariable("RUNNER_TEMP"); + } + + return tempPath!; + } + + public static string GetRepositoryTempPath() => Combine(GetTempPath(), "TestRepositories", Guid.NewGuid().ToString()); + public static string GetFullPath(string? path) { - if (path == null) - throw new ArgumentNullException(nameof(path)); + ArgumentNullException.ThrowIfNull(path, nameof(path)); return Path.GetFullPath(path); } + public static string Combine(string? path1, string? path2) { if (path1 == null || path2 == null) @@ -19,8 +43,7 @@ public static string Combine(string? path1, string? path2) public static string Combine(string? path1) { - if (path1 == null) - throw new ArgumentNullException(nameof(path1)); + ArgumentNullException.ThrowIfNull(path1, nameof(path1)); return Path.Combine(path1); } @@ -40,4 +63,10 @@ public static string Combine(string? path1, string? path2, string? path3, string return Path.Combine(path1, path2, path3, path4); } + + public static bool Equal(string? path, string? otherPath) => + string.Equals( + GetFullPath(path).TrimEnd('\\').TrimEnd('/'), + GetFullPath(otherPath).TrimEnd('\\').TrimEnd('/'), + OsDependentComparison); } diff --git a/src/GitVersion.Core/Helpers/ProcessHelper.cs b/src/GitVersion.Core/Helpers/ProcessHelper.cs index cbac47cd03..7706fe1324 100644 --- a/src/GitVersion.Core/Helpers/ProcessHelper.cs +++ b/src/GitVersion.Core/Helpers/ProcessHelper.cs @@ -1,10 +1,9 @@ using System.ComponentModel; using System.Runtime.InteropServices; -using GitVersion.Extensions; namespace GitVersion.Helpers; -public static class ProcessHelper +internal static class ProcessHelper { private static readonly object LockObject = new(); @@ -142,8 +141,7 @@ public static int Run(Action output, Action errorOutput, TextRea }; process.BeginErrorReadLine(); - string? line; - while ((line = input?.ReadLine()) != null) + while (input?.ReadLine() is { } line) process.StandardInput.WriteLine(line); process.StandardInput.Close(); @@ -192,12 +190,11 @@ public ChangeErrorMode(ErrorModes mode) } } - void IDisposable.Dispose() { try { - SetErrorMode(this.oldMode); + _ = SetErrorMode(this.oldMode); } catch (Exception ex) when (ex is EntryPointNotFoundException or DllNotFoundException) { diff --git a/src/GitVersion.Core/Helpers/RetryAction.cs b/src/GitVersion.Core/Helpers/RetryAction.cs index d8ba5f7784..0ad0998714 100644 --- a/src/GitVersion.Core/Helpers/RetryAction.cs +++ b/src/GitVersion.Core/Helpers/RetryAction.cs @@ -3,14 +3,9 @@ namespace GitVersion.Helpers; -public class RetryAction - : RetryAction where T : Exception +public class RetryAction(int maxRetries = 5) : RetryAction(maxRetries) + where T : Exception { - public RetryAction(int maxRetries = 5) - : base(maxRetries) - { - } - public void Execute(Action operation) => base.Execute(() => { operation(); diff --git a/src/GitVersion.Core/Helpers/StringComparerUtils.cs b/src/GitVersion.Core/Helpers/StringComparerUtils.cs deleted file mode 100644 index 850ee9c894..0000000000 --- a/src/GitVersion.Core/Helpers/StringComparerUtils.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace GitVersion.Helpers; - -public static class StringComparerUtils -{ - public static readonly StringComparer IgnoreCaseComparer = StringComparer.InvariantCultureIgnoreCase; - public static readonly StringComparison OsDependentComparison = System.Environment.OSVersion.Platform == PlatformID.Unix ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase; - public static readonly StringComparer OsDependentComparer = System.Environment.OSVersion.Platform == PlatformID.Unix ? StringComparer.Ordinal : StringComparer.OrdinalIgnoreCase; -} diff --git a/src/GitVersion.Core/Helpers/StringFormatWith.cs b/src/GitVersion.Core/Helpers/StringFormatWith.cs index 0cf27c838f..01ee127982 100644 --- a/src/GitVersion.Core/Helpers/StringFormatWith.cs +++ b/src/GitVersion.Core/Helpers/StringFormatWith.cs @@ -45,7 +45,7 @@ public static string FormatWith(this string template, T? source, IEnvironment throw new ArgumentNullException(nameof(source)); } - foreach (Match match in TokensRegex.Matches(template)) + foreach (Match match in TokensRegex.Matches(template).Cast()) { string propertyValue; string? fallback = match.Groups["fallback"].Success ? match.Groups["fallback"].Value : null; @@ -71,12 +71,12 @@ public static string FormatWith(this string template, T? source, IEnvironment return template; } - private static Func CompileDataBinder(Type type, string expr) + private static Func CompileDataBinder(Type type, string expr) { ParameterExpression param = Expression.Parameter(typeof(object)); Expression body = Expression.Convert(param, type); body = expr.Split('.').Aggregate(body, Expression.PropertyOrField); body = Expression.Convert(body, typeof(object)); // Convert result in case the body produces a Nullable value type. - return Expression.Lambda>(body, param).Compile(); + return Expression.Lambda>(body, param).Compile(); } } diff --git a/src/GitVersion.Core/Logging/Abstractions/ILog.cs b/src/GitVersion.Core/Logging/Abstractions/ILog.cs index 52ae0573cc..0277f8e333 100644 --- a/src/GitVersion.Core/Logging/Abstractions/ILog.cs +++ b/src/GitVersion.Core/Logging/Abstractions/ILog.cs @@ -6,4 +6,5 @@ public interface ILog void Write(Verbosity verbosity, LogLevel level, string format, params object[] args); IDisposable IndentLog(string operationDescription); void AddLogAppender(ILogAppender logAppender); + void Separator(); } diff --git a/src/GitVersion.Core/Logging/ConsoleAdapter.cs b/src/GitVersion.Core/Logging/ConsoleAdapter.cs index 18df5a066c..7f6f69c760 100644 --- a/src/GitVersion.Core/Logging/ConsoleAdapter.cs +++ b/src/GitVersion.Core/Logging/ConsoleAdapter.cs @@ -1,6 +1,8 @@ +using GitVersion.Helpers; + namespace GitVersion.Logging; -public class ConsoleAdapter : IConsole +internal class ConsoleAdapter : IConsole { public void WriteLine(string? msg) => Console.WriteLine(msg); diff --git a/src/GitVersion.Core/Logging/ConsoleAppender.cs b/src/GitVersion.Core/Logging/ConsoleAppender.cs index d75e9b1be8..13d424ae07 100644 --- a/src/GitVersion.Core/Logging/ConsoleAppender.cs +++ b/src/GitVersion.Core/Logging/ConsoleAppender.cs @@ -1,14 +1,10 @@ namespace GitVersion.Logging; -public class ConsoleAppender : ILogAppender +internal class ConsoleAppender : ILogAppender { - private readonly object locker; - private readonly IDictionary palettes; - public ConsoleAppender() - { - this.locker = new object(); - this.palettes = CreatePalette(); - } + private readonly object locker = new(); + private readonly IDictionary palettes = CreatePalette(); + public void WriteTo(LogLevel level, string message) { lock (this.locker) diff --git a/src/GitVersion.Core/Logging/Disposable.cs b/src/GitVersion.Core/Logging/Disposable.cs deleted file mode 100644 index 1075e5fdaf..0000000000 --- a/src/GitVersion.Core/Logging/Disposable.cs +++ /dev/null @@ -1,23 +0,0 @@ -using GitVersion.Extensions; - -namespace GitVersion.Logging; - -public static class Disposable -{ - public static IDisposable Create(Action disposer) => new AnonymousDisposable(disposer); - - public static readonly IDisposable Empty = Create(() => { }); - - private sealed class AnonymousDisposable : IDisposable - { - public AnonymousDisposable(Action disposer) => this.disposer = disposer.NotNull(); - - public void Dispose() - { - this.disposer?.Invoke(); - this.disposer = null; - } - - private Action? disposer; - } -} diff --git a/src/GitVersion.Core/Logging/FileAppender.cs b/src/GitVersion.Core/Logging/FileAppender.cs index 37c1657780..a5c8f56a78 100644 --- a/src/GitVersion.Core/Logging/FileAppender.cs +++ b/src/GitVersion.Core/Logging/FileAppender.cs @@ -1,6 +1,8 @@ +using GitVersion.Helpers; + namespace GitVersion.Logging; -public class FileAppender : ILogAppender +internal class FileAppender : ILogAppender { private readonly string filePath; @@ -10,7 +12,6 @@ public FileAppender(string filePath) var logFile = new FileInfo(Path.GetFullPath(filePath)); - // NOTE: logFile.Directory will be null if the path is i.e. C:\logfile.log. @asbjornu logFile.Directory?.Create(); if (logFile.Exists) return; @@ -23,7 +24,7 @@ public void WriteTo(LogLevel level, string message) { WriteLogEntry(this.filePath, message); } - catch (Exception) + catch { // } @@ -31,7 +32,7 @@ public void WriteTo(LogLevel level, string message) private static void WriteLogEntry(string logFilePath, string str) { - var contents = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}\t\t{str}{System.Environment.NewLine}"; + var contents = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}\t\t{str}{PathHelper.NewLine}"; File.AppendAllText(logFilePath, contents); } } diff --git a/src/GitVersion.Core/Logging/Log.cs b/src/GitVersion.Core/Logging/Log.cs index 3b3093d6c6..fbe9357f8d 100644 --- a/src/GitVersion.Core/Logging/Log.cs +++ b/src/GitVersion.Core/Logging/Log.cs @@ -1,27 +1,22 @@ using System.Globalization; using System.Text.RegularExpressions; +using GitVersion.Helpers; namespace GitVersion.Logging; -public sealed class Log : ILog +internal sealed class Log(params ILogAppender[] appenders) : ILog { - private IEnumerable appenders; + private IEnumerable appenders = appenders; private readonly Regex obscurePasswordRegex = new("(https?://)(.+)(:.+@)", RegexOptions.Compiled); - private readonly StringBuilder sb; - private string indent = string.Empty; + private readonly StringBuilder sb = new(); + private string currentIndentation = string.Empty; + private const string Indentation = " "; - public Log() : this(Array.Empty()) + public Log() : this([]) { } - public Log(params ILogAppender[] appenders) - { - this.appenders = appenders; - this.sb = new StringBuilder(); - Verbosity = Verbosity.Normal; - } - - public Verbosity Verbosity { get; set; } + public Verbosity Verbosity { get; set; } = Verbosity.Normal; public void Write(Verbosity verbosity, LogLevel level, string format, params object[] args) { @@ -30,7 +25,7 @@ public void Write(Verbosity verbosity, LogLevel level, string format, params obj return; } - var message = args.Any() ? string.Format(format, args) : format; + var message = args.Length != 0 ? string.Format(format, args) : format; var formattedString = FormatMessage(message, level.ToString().ToUpperInvariant()); foreach (var appender in this.appenders) { @@ -42,25 +37,30 @@ public void Write(Verbosity verbosity, LogLevel level, string format, params obj public IDisposable IndentLog(string operationDescription) { - var start = DateTime.Now; - Write(Verbosity.Normal, LogLevel.Info, $"Begin: {operationDescription}"); - this.indent += " "; + var start = TimeProvider.System.GetTimestamp(); + Write(Verbosity.Normal, LogLevel.Info, $"-< Begin: {operationDescription} >-"); + this.currentIndentation += Indentation; return Disposable.Create(() => { - var length = this.indent.Length - 2; - this.indent = length > 0 ? this.indent.Substring(0, length) : this.indent; - Write(Verbosity.Normal, LogLevel.Info, string.Format(CultureInfo.InvariantCulture, "End: {0} (Took: {1:N}ms)", operationDescription, DateTime.Now.Subtract(start).TotalMilliseconds)); + var length = this.currentIndentation.Length - Indentation.Length; + this.currentIndentation = length > 0 ? this.currentIndentation[..length] : ""; + var end = TimeProvider.System.GetTimestamp(); + var duration = TimeProvider.System.GetElapsedTime(start, end).TotalMilliseconds; + Write(Verbosity.Normal, LogLevel.Info, string.Format(CultureInfo.InvariantCulture, "-< End: {0} (Took: {1:N}ms) >-", operationDescription, duration)); }); } - public void AddLogAppender(ILogAppender logAppender) => this.appenders = this.appenders.Concat(new[] { logAppender }); + public void Separator() => Write(Verbosity.Normal, LogLevel.Info, "-------------------------------------------------------"); + + public void AddLogAppender(ILogAppender logAppender) => this.appenders = this.appenders.Concat([logAppender]); public override string ToString() => this.sb.ToString(); private string FormatMessage(string message, string level) { var obscuredMessage = this.obscurePasswordRegex.Replace(message, "$1$2:*******@"); - return string.Format(CultureInfo.InvariantCulture, "{0}{1} [{2:MM/dd/yy H:mm:ss:ff}] {3}", this.indent, level, DateTime.Now, obscuredMessage); + var timestamp = $"{DateTime.Now:yy-MM-dd H:mm:ss:ff}"; + return string.Format(CultureInfo.InvariantCulture, "{0}{1} [{2}] {3}", this.currentIndentation, level, timestamp, obscuredMessage); } } diff --git a/src/GitVersion.Core/Logging/LogExtensions.cs b/src/GitVersion.Core/Logging/LogExtensions.cs index 945f89332e..77dff958a6 100644 --- a/src/GitVersion.Core/Logging/LogExtensions.cs +++ b/src/GitVersion.Core/Logging/LogExtensions.cs @@ -1,3 +1,5 @@ +using GitVersion.Helpers; + namespace GitVersion.Logging; public static class LogExtensions @@ -42,7 +44,7 @@ public static class LogExtensions public static void Error(this ILog log, Verbosity verbosity, LogAction logAction) => log.Write(verbosity, LogLevel.Error, logAction); - public static void Write(this ILog log, LogLevel level, string format, params object[] args) + private static void Write(this ILog log, LogLevel level, string format, params object[] args) { var verbosity = GetVerbosityForLevel(level); if (verbosity > log.Verbosity) @@ -103,7 +105,7 @@ private static IDisposable WithVerbosity(this ILog log, Verbosity verbosity) return Disposable.Create(() => log.Verbosity = lastVerbosity); } - public static Verbosity GetVerbosityForLevel(LogLevel level) => VerbosityMaps[level]; + private static Verbosity GetVerbosityForLevel(LogLevel level) => VerbosityMaps[level]; private static readonly IDictionary VerbosityMaps = new Dictionary { diff --git a/src/GitVersion.Core/Logging/NullLog.cs b/src/GitVersion.Core/Logging/NullLog.cs index fb9ced94da..8a311f8cc2 100644 --- a/src/GitVersion.Core/Logging/NullLog.cs +++ b/src/GitVersion.Core/Logging/NullLog.cs @@ -1,6 +1,8 @@ +using GitVersion.Helpers; + namespace GitVersion.Logging; -public sealed class NullLog : ILog +internal sealed class NullLog : ILog { public Verbosity Verbosity { get; set; } @@ -14,5 +16,9 @@ public void AddLogAppender(ILogAppender logAppender) { } + public void Separator() + { + } + public string? Indent { get; set; } } diff --git a/src/GitVersion.Core/MergeMessage.cs b/src/GitVersion.Core/MergeMessage.cs new file mode 100644 index 0000000000..9dfe4416bf --- /dev/null +++ b/src/GitVersion.Core/MergeMessage.cs @@ -0,0 +1,113 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.RegularExpressions; +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion; + +public class MergeMessage +{ + private static readonly IList DefaultFormats = + [ + new("Default", @"^Merge (branch|tag) '(?[^']*)'(?: into (?[^\s]*))*"), + new("SmartGit", @"^Finish (?[^\s]*)(?: into (?[^\s]*))*"), + new("BitBucketPull", @"^Merge pull request #(?\d+) (from|in) (?.*) from (?[^\s]*) to (?[^\s]*)"), + new("BitBucketPullv7", @"^Pull request #(?\d+).*\r?\n\r?\nMerge in (?.*) from (?[^\s]*) to (?[^\s]*)"), + new("BitBucketCloudPull", @"^Merged in (?[^\s]*) \(pull request #(?\d+)\)"), + new("GitHubPull", @"^Merge pull request #(?\d+) (from|in) (?:[^\s\/]+\/)?(?[^\s]*)(?: into (?[^\s]*))*"), + new("RemoteTracking", @"^Merge remote-tracking branch '(?[^\s]*)'(?: into (?[^\s]*))*"), + new("AzureDevOpsPull", @"^Merge pull request (?\d+) from (?[^\s]*) into (?[^\s]*)") + ]; + + public MergeMessage(string mergeMessage, IGitVersionConfiguration configuration) + { + mergeMessage.NotNull(); + + if (mergeMessage == string.Empty) return; + + // Concatenate configuration formats with the defaults. + // Ensure configurations are processed first. + var allFormats = configuration.MergeMessageFormats + .Select(x => new MergeMessageFormat(x.Key, x.Value)) + .Concat(DefaultFormats); + + foreach (var format in allFormats) + { + var match = format.Pattern.Match(mergeMessage); + if (!match.Success) + continue; + + FormatName = format.Name; + var sourceBranch = match.Groups["SourceBranch"].Value; + MergedBranch = GetMergedBranchName(sourceBranch); + + if (match.Groups["TargetBranch"].Success) + { + TargetBranch = match.Groups["TargetBranch"].Value; + } + + if (int.TryParse(match.Groups["PullRequestNumber"].Value, out var pullNumber)) + { + PullRequestNumber = pullNumber; + } + + Version = ParseVersion( + configuration.VersionInBranchRegex, configuration.TagPrefix, configuration.SemanticVersionFormat + ); + + break; + } + } + + public string? FormatName { get; } + public string? TargetBranch { get; } + public ReferenceName? MergedBranch { get; } + + public bool IsMergedPullRequest => PullRequestNumber != null; + public int? PullRequestNumber { get; } + public SemanticVersion? Version { get; } + + private SemanticVersion? ParseVersion(Regex versionInBranchRegex, string? tagPrefix, SemanticVersionFormat format) + { + if (MergedBranch?.TryGetSemanticVersion(out var result, versionInBranchRegex, tagPrefix, format) == true) + return result.Value; + return null; + } + + private class MergeMessageFormat(string name, string pattern) + { + public string Name { get; } = name; + + public Regex Pattern { get; } = new(pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); + } + + private ReferenceName GetMergedBranchName(string mergedBranch) + { + if (FormatName == "RemoteTracking" && !mergedBranch.StartsWith(ReferenceName.RemoteTrackingBranchPrefix)) + { + mergedBranch = $"{ReferenceName.RemoteTrackingBranchPrefix}{mergedBranch}"; + } + return ReferenceName.FromBranchName(mergedBranch); + } + + public static bool TryParse( + ICommit mergeCommit, IGitVersionConfiguration configuration, [NotNullWhen(true)] out MergeMessage? mergeMessage) + { + mergeCommit.NotNull(); + configuration.NotNull(); + + mergeMessage = null; + + var mergedBranch = new MergeMessage(mergeCommit.Message, configuration).MergedBranch; + var isReleaseBranch = mergedBranch is not null && configuration.IsReleaseBranch(mergedBranch); + var isValidMergeCommit = mergeCommit.IsMergeCommit() || isReleaseBranch; + + if (isValidMergeCommit) + { + mergeMessage = new(mergeCommit.Message, configuration); + } + + return isValidMergeCommit; + } +} diff --git a/src/GitVersion.Core/Model/ConfigInfo.cs b/src/GitVersion.Core/Model/ConfigInfo.cs deleted file mode 100644 index 822a0ba25d..0000000000 --- a/src/GitVersion.Core/Model/ConfigInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using GitVersion.Model.Configuration; - -namespace GitVersion; - -public class ConfigInfo -{ - public string? ConfigFile; - public Config? OverrideConfig; - public bool ShowConfig; -} diff --git a/src/GitVersion.Core/Model/Configuration/BranchConfig.cs b/src/GitVersion.Core/Model/Configuration/BranchConfig.cs deleted file mode 100644 index 46e60ed892..0000000000 --- a/src/GitVersion.Core/Model/Configuration/BranchConfig.cs +++ /dev/null @@ -1,123 +0,0 @@ -using GitVersion.VersionCalculation; -using YamlDotNet.Serialization; - -namespace GitVersion.Model.Configuration; - -public class BranchConfig -{ - public BranchConfig() - { - } - - /// - /// Creates a clone of the given . - /// - public BranchConfig(BranchConfig branchConfiguration) - { - VersioningMode = branchConfiguration.VersioningMode; - Tag = branchConfiguration.Tag; - Increment = branchConfiguration.Increment; - PreventIncrementOfMergedBranchVersion = branchConfiguration.PreventIncrementOfMergedBranchVersion; - TagNumberPattern = branchConfiguration.TagNumberPattern; - TrackMergeTarget = branchConfiguration.TrackMergeTarget; - CommitMessageIncrementing = branchConfiguration.CommitMessageIncrementing; - TracksReleaseBranches = branchConfiguration.TracksReleaseBranches; - Regex = branchConfiguration.Regex; - IsReleaseBranch = branchConfiguration.IsReleaseBranch; - IsMainline = branchConfiguration.IsMainline; - Name = branchConfiguration.Name; - SourceBranches = branchConfiguration.SourceBranches; - IsSourceBranchFor = branchConfiguration.IsSourceBranchFor; - PreReleaseWeight = branchConfiguration.PreReleaseWeight; - } - - [YamlMember(Alias = "mode")] - public VersioningMode? VersioningMode { get; set; } - - /// - /// Special value 'useBranchName' will extract the tag from the branch name - /// - [YamlMember(Alias = "tag")] - public string? Tag { get; set; } - - [YamlMember(Alias = "increment")] - public IncrementStrategy? Increment { get; set; } - - [YamlMember(Alias = "prevent-increment-of-merged-branch-version")] - public bool? PreventIncrementOfMergedBranchVersion { get; set; } - - [YamlMember(Alias = "tag-number-pattern")] - public string? TagNumberPattern { get; set; } - - [YamlMember(Alias = "track-merge-target")] - public bool? TrackMergeTarget { get; set; } - - [YamlMember(Alias = "commit-message-incrementing")] - public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; } - - [YamlMember(Alias = "regex")] - public string? Regex { get; set; } - - [YamlMember(Alias = "source-branches")] - public HashSet? SourceBranches { get; set; } - - [YamlMember(Alias = "is-source-branch-for")] - public HashSet? IsSourceBranchFor { get; set; } - - [YamlMember(Alias = "tracks-release-branches")] - public bool? TracksReleaseBranches { get; set; } - - [YamlMember(Alias = "is-release-branch")] - public bool? IsReleaseBranch { get; set; } - - [YamlMember(Alias = "is-mainline")] - public bool? IsMainline { get; set; } - - [YamlMember(Alias = "pre-release-weight")] - public int? PreReleaseWeight { get; set; } - - /// - /// The name given to this configuration in the config file. - /// - [YamlIgnore] - public string Name { get; set; } - - public void MergeTo(BranchConfig targetConfig) - { - if (targetConfig == null) throw new ArgumentNullException(nameof(targetConfig)); - - targetConfig.VersioningMode = this.VersioningMode ?? targetConfig.VersioningMode; - targetConfig.Tag = this.Tag ?? targetConfig.Tag; - targetConfig.Increment = this.Increment ?? targetConfig.Increment; - targetConfig.PreventIncrementOfMergedBranchVersion = this.PreventIncrementOfMergedBranchVersion ?? targetConfig.PreventIncrementOfMergedBranchVersion; - targetConfig.TagNumberPattern = this.TagNumberPattern ?? targetConfig.TagNumberPattern; - targetConfig.TrackMergeTarget = this.TrackMergeTarget ?? targetConfig.TrackMergeTarget; - targetConfig.CommitMessageIncrementing = this.CommitMessageIncrementing ?? targetConfig.CommitMessageIncrementing; - targetConfig.Regex = this.Regex ?? targetConfig.Regex; - targetConfig.SourceBranches = this.SourceBranches ?? targetConfig.SourceBranches; - targetConfig.IsSourceBranchFor = this.IsSourceBranchFor ?? targetConfig.IsSourceBranchFor; - targetConfig.TracksReleaseBranches = this.TracksReleaseBranches ?? targetConfig.TracksReleaseBranches; - targetConfig.IsReleaseBranch = this.IsReleaseBranch ?? targetConfig.IsReleaseBranch; - targetConfig.IsMainline = this.IsMainline ?? targetConfig.IsMainline; - targetConfig.PreReleaseWeight = this.PreReleaseWeight ?? targetConfig.PreReleaseWeight; - } - - public BranchConfig Apply(BranchConfig overrides) - { - if (overrides == null) throw new ArgumentNullException(nameof(overrides)); - - overrides.MergeTo(this); - return this; - } - - public static BranchConfig CreateDefaultBranchConfig(string name) => new() - { - Name = name, - Tag = "useBranchName", - PreventIncrementOfMergedBranchVersion = false, - TrackMergeTarget = false, - TracksReleaseBranches = false, - IsReleaseBranch = false, - IsMainline = false - }; -} diff --git a/src/GitVersion.Core/Model/Configuration/Config.cs b/src/GitVersion.Core/Model/Configuration/Config.cs deleted file mode 100644 index f655cec39b..0000000000 --- a/src/GitVersion.Core/Model/Configuration/Config.cs +++ /dev/null @@ -1,123 +0,0 @@ -using System.Globalization; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.VersionCalculation; -using YamlDotNet.Serialization; - -namespace GitVersion.Model.Configuration; - -public class Config -{ - private string? nextVersion; - - public Config() - { - Branches = new Dictionary(); - Ignore = new IgnoreConfig(); - } - - [YamlMember(Alias = "assembly-versioning-scheme")] - public AssemblyVersioningScheme? AssemblyVersioningScheme { get; set; } - - [YamlMember(Alias = "assembly-file-versioning-scheme")] - public AssemblyFileVersioningScheme? AssemblyFileVersioningScheme { get; set; } - - [YamlMember(Alias = "assembly-informational-format")] - public string? AssemblyInformationalFormat { get; set; } - - [YamlMember(Alias = "assembly-versioning-format")] - public string? AssemblyVersioningFormat { get; set; } - - [YamlMember(Alias = "assembly-file-versioning-format")] - public string? AssemblyFileVersioningFormat { get; set; } - - [YamlMember(Alias = "mode")] - public VersioningMode? VersioningMode { get; set; } - - [YamlMember(Alias = "tag-prefix")] - public string? TagPrefix { get; set; } - - [YamlMember(Alias = "continuous-delivery-fallback-tag")] - public string? ContinuousDeploymentFallbackTag { get; set; } - - [YamlMember(Alias = "next-version")] - public string? NextVersion - { - get => this.nextVersion; - set => - this.nextVersion = int.TryParse(value, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out var major) - ? $"{major}.0" - : value; - } - - [YamlMember(Alias = "major-version-bump-message")] - public string? MajorVersionBumpMessage { get; set; } - - [YamlMember(Alias = "minor-version-bump-message")] - public string? MinorVersionBumpMessage { get; set; } - - [YamlMember(Alias = "patch-version-bump-message")] - public string? PatchVersionBumpMessage { get; set; } - - [YamlMember(Alias = "no-bump-message")] - public string? NoBumpMessage { get; set; } - - [YamlMember(Alias = "legacy-semver-padding")] - public int? LegacySemVerPadding { get; set; } - - [YamlMember(Alias = "build-metadata-padding")] - public int? BuildMetaDataPadding { get; set; } - - [YamlMember(Alias = "commits-since-version-source-padding")] - public int? CommitsSinceVersionSourcePadding { get; set; } - - [YamlMember(Alias = "tag-pre-release-weight")] - public int? TagPreReleaseWeight { get; set; } - - [YamlMember(Alias = "commit-message-incrementing")] - public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; } - - [YamlMember(Alias = "branches")] - public Dictionary Branches { get; set; } - - [YamlMember(Alias = "ignore")] - public IgnoreConfig Ignore { get; set; } - - [YamlMember(Alias = "increment")] - public IncrementStrategy? Increment { get; set; } - - [YamlMember(Alias = "commit-date-format")] - public string? CommitDateFormat { get; set; } - - [YamlMember(Alias = "merge-message-formats")] - public Dictionary MergeMessageFormats { get; set; } = new(); - - [YamlMember(Alias = "update-build-number")] - public bool? UpdateBuildNumber { get; set; } - - public override string ToString() - { - var stringBuilder = new StringBuilder(); - using var stream = new StringWriter(stringBuilder); - ConfigSerializer.Write(this, stream); - stream.Flush(); - return stringBuilder.ToString(); - } - - public const string DefaultTagPrefix = "[vV]"; - public const string ReleaseBranchRegex = "^releases?[/-]"; - public const string FeatureBranchRegex = "^features?[/-]"; - public const string PullRequestRegex = @"^(pull|pull\-requests|pr)[/-]"; - public const string HotfixBranchRegex = "^hotfix(es)?[/-]"; - public const string SupportBranchRegex = "^support[/-]"; - public const string DevelopBranchRegex = "^dev(elop)?(ment)?$"; - public const string MainBranchRegex = "^master$|^main$"; - public const string MainBranchKey = "main"; - public const string MasterBranchKey = "master"; - public const string ReleaseBranchKey = "release"; - public const string FeatureBranchKey = "feature"; - public const string PullRequestBranchKey = "pull-request"; - public const string HotfixBranchKey = "hotfix"; - public const string SupportBranchKey = "support"; - public const string DevelopBranchKey = "develop"; -} diff --git a/src/GitVersion.Core/Model/Configuration/EffectiveBranchConfiguration.cs b/src/GitVersion.Core/Model/Configuration/EffectiveBranchConfiguration.cs deleted file mode 100644 index e45d1afa6c..0000000000 --- a/src/GitVersion.Core/Model/Configuration/EffectiveBranchConfiguration.cs +++ /dev/null @@ -1,20 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.VersionCalculation; - -namespace GitVersion.Model.Configuration; - -public class EffectiveBranchConfiguration -{ - public IBranch Branch { get; } - - public EffectiveConfiguration Value { get; } - - public EffectiveBranchConfiguration(IBranch branch, EffectiveConfiguration value) - { - Branch = branch.NotNull(); - Value = value.NotNull(); - } - - public NextVersion CreateNextVersion(BaseVersion baseVersion, SemanticVersion incrementedVersion) - => new(incrementedVersion.NotNull(), baseVersion.NotNull(), new(Branch, Value)); -} diff --git a/src/GitVersion.Core/Model/Configuration/EffectiveConfiguration.cs b/src/GitVersion.Core/Model/Configuration/EffectiveConfiguration.cs deleted file mode 100644 index f0ba2bef63..0000000000 --- a/src/GitVersion.Core/Model/Configuration/EffectiveConfiguration.cs +++ /dev/null @@ -1,201 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.VersionCalculation; - -namespace GitVersion.Model.Configuration; - -/// -/// Configuration can be applied to different things, effective configuration is the result after applying the -/// appropriate configuration -/// -public class EffectiveConfiguration -{ - public EffectiveConfiguration(Config configuration, BranchConfig currentBranchConfig) - { - configuration.NotNull(); - currentBranchConfig.NotNull(); - - var name = currentBranchConfig.Name; - - if (!currentBranchConfig.VersioningMode.HasValue) - throw new Exception($"Configuration value for 'Versioning mode' for branch {name} has no value. (this should not happen, please report an issue)"); - - if (!currentBranchConfig.Increment.HasValue) - throw new Exception($"Configuration value for 'Increment' for branch {name} has no value. (this should not happen, please report an issue)"); - - if (!configuration.AssemblyVersioningScheme.HasValue) - throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)"); - - if (!configuration.AssemblyFileVersioningScheme.HasValue) - throw new Exception("Configuration value for 'AssemblyFileVersioningScheme' has no value. (this should not happen, please report an issue)"); - - if (!configuration.CommitMessageIncrementing.HasValue) - throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)"); - - if (!configuration.LegacySemVerPadding.HasValue) - throw new Exception("Configuration value for 'LegacySemVerPadding' has no value. (this should not happen, please report an issue)"); - - if (!configuration.BuildMetaDataPadding.HasValue) - throw new Exception("Configuration value for 'BuildMetaDataPadding' has no value. (this should not happen, please report an issue)"); - - if (!configuration.CommitsSinceVersionSourcePadding.HasValue) - throw new Exception("Configuration value for 'CommitsSinceVersionSourcePadding' has no value. (this should not happen, please report an issue)"); - - if (!configuration.TagPreReleaseWeight.HasValue) - throw new Exception("Configuration value for 'TagPreReleaseWeight' has no value. (this should not happen, please report an issue)"); - - AssemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value; - AssemblyFileVersioningScheme = configuration.AssemblyFileVersioningScheme.Value; - AssemblyInformationalFormat = configuration.AssemblyInformationalFormat; - AssemblyVersioningFormat = configuration.AssemblyVersioningFormat; - AssemblyFileVersioningFormat = configuration.AssemblyFileVersioningFormat; - VersioningMode = currentBranchConfig.VersioningMode.Value; - TagPrefix = configuration.TagPrefix; - Tag = currentBranchConfig.Tag ?? @"{BranchName}"; - NextVersion = configuration.NextVersion; - Increment = currentBranchConfig.Increment.Value; - BranchPrefixToTrim = currentBranchConfig.Regex; - PreventIncrementOfMergedBranchVersion = currentBranchConfig.PreventIncrementOfMergedBranchVersion ?? false; - TagNumberPattern = currentBranchConfig.TagNumberPattern; - ContinuousDeploymentFallbackTag = configuration.ContinuousDeploymentFallbackTag; - TrackMergeTarget = currentBranchConfig.TrackMergeTarget ?? false; - MajorVersionBumpMessage = configuration.MajorVersionBumpMessage; - MinorVersionBumpMessage = configuration.MinorVersionBumpMessage; - PatchVersionBumpMessage = configuration.PatchVersionBumpMessage; - NoBumpMessage = configuration.NoBumpMessage; - CommitMessageIncrementing = currentBranchConfig.CommitMessageIncrementing ?? configuration.CommitMessageIncrementing.Value; - LegacySemVerPadding = configuration.LegacySemVerPadding.Value; - BuildMetaDataPadding = configuration.BuildMetaDataPadding.Value; - CommitsSinceVersionSourcePadding = configuration.CommitsSinceVersionSourcePadding.Value; - VersionFilters = configuration.Ignore.ToFilters(); - TracksReleaseBranches = currentBranchConfig.TracksReleaseBranches ?? false; - IsReleaseBranch = currentBranchConfig.IsReleaseBranch ?? false; - IsMainline = currentBranchConfig.IsMainline ?? false; - CommitDateFormat = configuration.CommitDateFormat; - UpdateBuildNumber = configuration.UpdateBuildNumber ?? true; - PreReleaseWeight = currentBranchConfig.PreReleaseWeight ?? 0; - TagPreReleaseWeight = configuration.TagPreReleaseWeight.Value; - } - - protected EffectiveConfiguration(AssemblyVersioningScheme assemblyVersioningScheme, - AssemblyFileVersioningScheme assemblyFileVersioningScheme, - string? assemblyInformationalFormat, - string? assemblyVersioningFormat, - string? assemblyFileVersioningFormat, - VersioningMode versioningMode, - string? tagPrefix, - string? tag, - string? nextVersion, - IncrementStrategy increment, - string? branchPrefixToTrim, - bool preventIncrementOfMergedBranchVersion, - string? tagNumberPattern, - string? continuousDeploymentFallbackTag, - bool trackMergeTarget, - string? majorVersionBumpMessage, - string? minorVersionBumpMessage, - string? patchVersionBumpMessage, - string? noBumpMessage, - CommitMessageIncrementMode commitMessageIncrementing, - int legacySemVerPaddding, - int buildMetaDataPadding, - int commitsSinceVersionSourcePadding, - IEnumerable versionFilters, - bool tracksReleaseBranches, - bool isReleaseBranch, - bool isMainline, - string? commitDateFormat, - bool updateBuildNumber, - int preReleaseWeight, - int tagPreReleaseWeight) - { - AssemblyVersioningScheme = assemblyVersioningScheme; - AssemblyFileVersioningScheme = assemblyFileVersioningScheme; - AssemblyInformationalFormat = assemblyInformationalFormat; - AssemblyVersioningFormat = assemblyVersioningFormat; - AssemblyFileVersioningFormat = assemblyFileVersioningFormat; - VersioningMode = versioningMode; - TagPrefix = tagPrefix; - Tag = tag; - NextVersion = nextVersion; - Increment = increment; - BranchPrefixToTrim = branchPrefixToTrim; - PreventIncrementOfMergedBranchVersion = preventIncrementOfMergedBranchVersion; - TagNumberPattern = tagNumberPattern; - ContinuousDeploymentFallbackTag = continuousDeploymentFallbackTag; - TrackMergeTarget = trackMergeTarget; - MajorVersionBumpMessage = majorVersionBumpMessage; - MinorVersionBumpMessage = minorVersionBumpMessage; - PatchVersionBumpMessage = patchVersionBumpMessage; - NoBumpMessage = noBumpMessage; - CommitMessageIncrementing = commitMessageIncrementing; - LegacySemVerPadding = legacySemVerPaddding; - BuildMetaDataPadding = buildMetaDataPadding; - CommitsSinceVersionSourcePadding = commitsSinceVersionSourcePadding; - VersionFilters = versionFilters; - TracksReleaseBranches = tracksReleaseBranches; - IsReleaseBranch = isReleaseBranch; - IsMainline = isMainline; - CommitDateFormat = commitDateFormat; - UpdateBuildNumber = updateBuildNumber; - PreReleaseWeight = preReleaseWeight; - TagPreReleaseWeight = tagPreReleaseWeight; - } - - public bool TracksReleaseBranches { get; } - public bool IsReleaseBranch { get; } - public bool IsMainline { get; } - public VersioningMode VersioningMode { get; } - public AssemblyVersioningScheme AssemblyVersioningScheme { get; } - public AssemblyFileVersioningScheme AssemblyFileVersioningScheme { get; } - public string? AssemblyInformationalFormat { get; } - public string? AssemblyVersioningFormat { get; } - public string? AssemblyFileVersioningFormat { get; } - - /// - /// Git tag prefix - /// - public string? TagPrefix { get; } - - /// - /// Tag to use when calculating SemVer - /// - public string? Tag { get; } - - public string? NextVersion { get; } - - public IncrementStrategy Increment { get; } - - public string? BranchPrefixToTrim { get; } - - public bool PreventIncrementOfMergedBranchVersion { get; } - - public string? TagNumberPattern { get; } - - public string? ContinuousDeploymentFallbackTag { get; } - - public bool TrackMergeTarget { get; } - - public string? MajorVersionBumpMessage { get; } - - public string? MinorVersionBumpMessage { get; } - - public string? PatchVersionBumpMessage { get; } - - public string? NoBumpMessage { get; } - public int LegacySemVerPadding { get; } - public int BuildMetaDataPadding { get; } - - public int CommitsSinceVersionSourcePadding { get; } - - public CommitMessageIncrementMode CommitMessageIncrementing { get; } - - public IEnumerable VersionFilters { get; } - - public string? CommitDateFormat { get; } - - public bool UpdateBuildNumber { get; } - - public int PreReleaseWeight { get; } - - public int TagPreReleaseWeight { get; } -} diff --git a/src/GitVersion.Core/Model/Configuration/IgnoreConfig.cs b/src/GitVersion.Core/Model/Configuration/IgnoreConfig.cs deleted file mode 100644 index 43dc60e288..0000000000 --- a/src/GitVersion.Core/Model/Configuration/IgnoreConfig.cs +++ /dev/null @@ -1,24 +0,0 @@ -using GitVersion.VersionCalculation; -using YamlDotNet.Serialization; - -namespace GitVersion.Model.Configuration; - -public class IgnoreConfig -{ - public IgnoreConfig() => ShAs = Enumerable.Empty(); - - [YamlMember(Alias = "commits-before")] - public DateTimeOffset? Before { get; set; } - - [YamlMember(Alias = "sha")] - public IEnumerable ShAs { get; set; } - - [YamlIgnore] - public virtual bool IsEmpty => Before == null && ShAs.Any() == false; - - public virtual IEnumerable ToFilters() - { - if (ShAs.Any()) yield return new ShaVersionFilter(ShAs); - if (Before.HasValue) yield return new MinDateVersionFilter(Before.Value); - } -} diff --git a/src/GitVersion.Core/Model/Exceptions/BugException.cs b/src/GitVersion.Core/Model/Exceptions/BugException.cs deleted file mode 100644 index 50ab60c127..0000000000 --- a/src/GitVersion.Core/Model/Exceptions/BugException.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace GitVersion; - -public class BugException : Exception -{ - public BugException(string message) : base(message) - { - } -} diff --git a/src/GitVersion.Core/Model/Exceptions/ConfigurationException.cs b/src/GitVersion.Core/Model/Exceptions/ConfigurationException.cs deleted file mode 100644 index 9eb11864f3..0000000000 --- a/src/GitVersion.Core/Model/Exceptions/ConfigurationException.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace GitVersion.Configuration; - -[Serializable] -public class ConfigurationException : GitVersionException -{ - public ConfigurationException(string msg) - : base(msg) - { - } -} diff --git a/src/GitVersion.Core/Model/Exceptions/GitToolsException.cs b/src/GitVersion.Core/Model/Exceptions/GitToolsException.cs deleted file mode 100644 index ecbd39cd81..0000000000 --- a/src/GitVersion.Core/Model/Exceptions/GitToolsException.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GitVersion; - -[Serializable] -public class GitToolsException : Exception -{ - public GitToolsException(string messageFormat, params object[] args) - : base(string.Format(messageFormat, args)) - { - } - - public GitToolsException(string message, Exception innerException) - : base(message, innerException) - { - } -} diff --git a/src/GitVersion.Core/Model/Exceptions/InfiniteLoopProtectionException.cs b/src/GitVersion.Core/Model/Exceptions/InfiniteLoopProtectionException.cs deleted file mode 100644 index 0828ae18c1..0000000000 --- a/src/GitVersion.Core/Model/Exceptions/InfiniteLoopProtectionException.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace GitVersion.Model.Exceptions -{ - public class InfiniteLoopProtectionException : Exception - { - public InfiniteLoopProtectionException(string messageFormat) - : base(messageFormat) - { - } - } -} diff --git a/src/GitVersion.Core/Model/Exceptions/LockedFileException.cs b/src/GitVersion.Core/Model/Exceptions/LockedFileException.cs deleted file mode 100644 index ac742982b0..0000000000 --- a/src/GitVersion.Core/Model/Exceptions/LockedFileException.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace GitVersion; - -public class LockedFileException : Exception -{ - public LockedFileException(Exception inner) : base(inner.Message, inner) - { - } -} diff --git a/src/GitVersion.Core/Model/FileWriteInfo.cs b/src/GitVersion.Core/Model/FileWriteInfo.cs deleted file mode 100644 index 976dd386c1..0000000000 --- a/src/GitVersion.Core/Model/FileWriteInfo.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GitVersion; - -public sealed class FileWriteInfo -{ - public FileWriteInfo(string workingDirectory, string fileName, string fileExtension) - { - WorkingDirectory = workingDirectory; - FileName = fileName; - FileExtension = fileExtension; - } - - public string WorkingDirectory { get; } - public string FileName { get; } - public string FileExtension { get; } -} diff --git a/src/GitVersion.Core/Model/GitVersionCacheKey.cs b/src/GitVersion.Core/Model/GitVersionCacheKey.cs deleted file mode 100644 index d12e85c9ca..0000000000 --- a/src/GitVersion.Core/Model/GitVersionCacheKey.cs +++ /dev/null @@ -1,18 +0,0 @@ -using GitVersion.Extensions; - -namespace GitVersion.Cache; - -public class GitVersionCacheKey -{ - public GitVersionCacheKey(string value) - { - if (value.IsNullOrEmpty()) - { - throw new ArgumentNullException(nameof(value)); - } - - Value = value; - } - - public string Value { get; private set; } -} diff --git a/src/GitVersion.Core/Model/GitVersionContext.cs b/src/GitVersion.Core/Model/GitVersionContext.cs deleted file mode 100644 index 3d303072a6..0000000000 --- a/src/GitVersion.Core/Model/GitVersionContext.cs +++ /dev/null @@ -1,41 +0,0 @@ -using GitVersion.Configuration; -using GitVersion.Model.Configuration; - -namespace GitVersion; - -/// -/// Contextual information about where GitVersion is being run -/// -public class GitVersionContext -{ - /// - /// Contains the raw configuration, use Configuration for specific config based on the current GitVersion context. - /// - public Config FullConfiguration { get; } - - public SemanticVersion? CurrentCommitTaggedVersion { get; } - - public IBranch CurrentBranch { get; } - - public ICommit? CurrentCommit { get; } - - public bool IsCurrentCommitTagged => CurrentCommitTaggedVersion != null; - - public int NumberOfUncommittedChanges { get; } - - public GitVersionContext(IBranch currentBranch, ICommit? currentCommit, - Config configuration, SemanticVersion? currentCommitTaggedVersion, int numberOfUncommittedChanges) - { - CurrentBranch = currentBranch; - CurrentCommit = currentCommit; - FullConfiguration = configuration; - CurrentCommitTaggedVersion = currentCommitTaggedVersion; - NumberOfUncommittedChanges = numberOfUncommittedChanges; - } - - public EffectiveConfiguration GetEffectiveConfiguration(IBranch branch) - { - BranchConfig branchConfiguration = FullConfiguration.GetBranchConfiguration(branch); - return new EffectiveConfiguration(FullConfiguration, branchConfiguration); - } -} diff --git a/src/GitVersion.Core/Model/MergeMessage.cs b/src/GitVersion.Core/Model/MergeMessage.cs deleted file mode 100644 index 97a5c425f0..0000000000 --- a/src/GitVersion.Core/Model/MergeMessage.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System.Text.RegularExpressions; -using GitVersion.Model.Configuration; - -namespace GitVersion; - -public class MergeMessage -{ - private static readonly IList DefaultFormats = new List - { - new("Default", @"^Merge (branch|tag) '(?[^']*)'(?: into (?[^\s]*))*"), - new("SmartGit", @"^Finish (?[^\s]*)(?: into (?[^\s]*))*"), - new("BitBucketPull", @"^Merge pull request #(?\d+) (from|in) (?.*) from (?[^\s]*) to (?[^\s]*)"), - new("BitBucketPullv7", @"^Pull request #(?\d+).*\r?\n\r?\nMerge in (?.*) from (?[^\s]*) to (?[^\s]*)"), - new("GitHubPull", @"^Merge pull request #(?\d+) (from|in) (?:(?[^\s]*))(?: into (?[^\s]*))*"), - new("RemoteTracking", @"^Merge remote-tracking branch '(?[^\s]*)'(?: into (?[^\s]*))*") - }; - - public MergeMessage(string? mergeMessage, Config config) - { - if (mergeMessage == null) - throw new NullReferenceException(); - - // Concat config formats with the defaults. - // Ensure configs are processed first. - var allFormats = config.MergeMessageFormats - .Select(x => new MergeMessageFormat(x.Key, x.Value)) - .Concat(DefaultFormats); - - foreach (var format in allFormats) - { - var match = format.Pattern.Match(mergeMessage); - if (match.Success) - { - FormatName = format.Name; - MergedBranch = match.Groups["SourceBranch"].Value; - - if (match.Groups["TargetBranch"].Success) - { - TargetBranch = match.Groups["TargetBranch"].Value; - } - - if (int.TryParse(match.Groups["PullRequestNumber"].Value, out var pullNumber)) - { - PullRequestNumber = pullNumber; - } - - Version = ParseVersion(config.TagPrefix); - - break; - } - } - } - - public string? FormatName { get; } - public string? TargetBranch { get; } - public string MergedBranch { get; } = ""; - public bool IsMergedPullRequest => PullRequestNumber != null; - public int? PullRequestNumber { get; } - public SemanticVersion? Version { get; } - - private SemanticVersion? ParseVersion(string? tagPrefix) - { - if (tagPrefix is null) - return null; - // Remove remotes and branch prefixes like release/ feature/ hotfix/ etc - var toMatch = Regex.Replace(MergedBranch, @"^(\w+[-/])*", "", RegexOptions.IgnoreCase); - toMatch = Regex.Replace(toMatch, $"^{tagPrefix}", ""); - // We don't match if the version is likely an ip (i.e starts with http://) - var versionMatch = new Regex(@"^(?> -{ - public VersionVariables(string major, - string minor, - string patch, - string? buildMetaData, - string? buildMetaDataPadded, - string? fullBuildMetaData, - string? branchName, - string? escapedBranchName, - string? sha, - string? shortSha, - string majorMinorPatch, - string semVer, - string legacySemVer, - string legacySemVerPadded, - string fullSemVer, - string? assemblySemVer, - string? assemblySemFileVer, - string? preReleaseTag, - string? preReleaseTagWithDash, - string? preReleaseLabel, - string? preReleaseLabelWithDash, - string? preReleaseNumber, - string weightedPreReleaseNumber, - string? informationalVersion, - string? commitDate, - string nugetVersion, - string nugetVersionV2, - string? nugetPreReleaseTag, - string? nugetPreReleaseTagV2, - string? versionSourceSha, - string? commitsSinceVersionSource, - string? commitsSinceVersionSourcePadded, - string? uncommittedChanges) - { - Major = major; - Minor = minor; - Patch = patch; - BuildMetaData = buildMetaData; - BuildMetaDataPadded = buildMetaDataPadded; - FullBuildMetaData = fullBuildMetaData; - BranchName = branchName; - EscapedBranchName = escapedBranchName; - Sha = sha; - ShortSha = shortSha; - MajorMinorPatch = majorMinorPatch; - SemVer = semVer; - LegacySemVer = legacySemVer; - LegacySemVerPadded = legacySemVerPadded; - FullSemVer = fullSemVer; - AssemblySemVer = assemblySemVer; - AssemblySemFileVer = assemblySemFileVer; - PreReleaseTag = preReleaseTag; - PreReleaseTagWithDash = preReleaseTagWithDash; - PreReleaseLabel = preReleaseLabel; - PreReleaseLabelWithDash = preReleaseLabelWithDash; - PreReleaseNumber = preReleaseNumber; - WeightedPreReleaseNumber = weightedPreReleaseNumber; - InformationalVersion = informationalVersion; - CommitDate = commitDate; - NuGetVersion = nugetVersion; - NuGetVersionV2 = nugetVersionV2; - NuGetPreReleaseTag = nugetPreReleaseTag; - NuGetPreReleaseTagV2 = nugetPreReleaseTagV2; - VersionSourceSha = versionSourceSha; - CommitsSinceVersionSource = commitsSinceVersionSource; - CommitsSinceVersionSourcePadded = commitsSinceVersionSourcePadded; - UncommittedChanges = uncommittedChanges; - } - - public string Major { get; } - public string Minor { get; } - public string Patch { get; } - public string? PreReleaseTag { get; } - public string? PreReleaseTagWithDash { get; } - public string? PreReleaseLabel { get; } - public string? PreReleaseLabelWithDash { get; } - public string? PreReleaseNumber { get; } - public string WeightedPreReleaseNumber { get; } - public string? BuildMetaData { get; } - public string? BuildMetaDataPadded { get; } - public string? FullBuildMetaData { get; } - public string MajorMinorPatch { get; } - public string SemVer { get; } - public string LegacySemVer { get; } - public string LegacySemVerPadded { get; } - public string? AssemblySemVer { get; } - public string? AssemblySemFileVer { get; } - public string FullSemVer { get; } - public string? InformationalVersion { get; } - public string? BranchName { get; } - public string? EscapedBranchName { get; } - public string? Sha { get; } - public string? ShortSha { get; } - public string NuGetVersionV2 { get; } - public string NuGetVersion { get; } - public string? NuGetPreReleaseTagV2 { get; } - public string? NuGetPreReleaseTag { get; } - public string? VersionSourceSha { get; } - public string? CommitsSinceVersionSource { get; } - public string? CommitsSinceVersionSourcePadded { get; } - public string? UncommittedChanges { get; } - public string? CommitDate { get; set; } - - [ReflectionIgnore] - public static IEnumerable AvailableVariables => typeof(VersionVariables) - .GetProperties() - .Where(p => !p.GetCustomAttributes(typeof(ReflectionIgnoreAttribute), false).Any()) - .Select(p => p.Name) - .OrderBy(a => a, StringComparer.Ordinal); - - [ReflectionIgnore] - public string? FileName { get; set; } - - [ReflectionIgnore] - public string? this[string variable] => typeof(VersionVariables).GetProperty(variable)?.GetValue(this, null) as string; - - public IEnumerator> GetEnumerator() => this.GetProperties().GetEnumerator(); - - IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); - - // FIX ME: Shall we return an instance with no ctorArgs or explicitly fail when properties is null? - private static VersionVariables FromDictionary(IEnumerable>? properties) - { - var type = typeof(VersionVariables); - var constructors = type.GetConstructors(); - - var ctor = constructors.Single(); - var ctorArgs = ctor.GetParameters() - .Select(p => properties?.Single(v => string.Equals(v.Key, p.Name, StringComparison.InvariantCultureIgnoreCase)).Value) - .Cast() - .ToArray(); - return (VersionVariables)Activator.CreateInstance(type, ctorArgs); - } - - public static VersionVariables FromJson(string json) - { - var serializeOptions = JsonSerializerOptions(); - var variablePairs = JsonSerializer.Deserialize>(json, serializeOptions); - return FromDictionary(variablePairs); - } - - public static VersionVariables FromFile(string filePath, IFileSystem fileSystem) - { - try - { - var retryAction = new RetryAction(); - return retryAction.Execute(() => FromFileInternal(filePath, fileSystem)); - } - catch (AggregateException ex) - { - var lastException = ex.InnerExceptions.LastOrDefault() ?? ex.InnerException; - if (lastException != null) - { - throw lastException; - } - throw; - } - } - private static VersionVariables FromFileInternal(string filePath, IFileSystem fileSystem) - { - using var stream = fileSystem.OpenRead(filePath); - using var reader = new StreamReader(stream); - var dictionary = new Deserializer().Deserialize>(reader); - var versionVariables = FromDictionary(dictionary); - versionVariables.FileName = filePath; - return versionVariables; - } - - public bool TryGetValue(string variable, out string? variableValue) - { - if (ContainsKey(variable)) - { - variableValue = this[variable]; - return true; - } - - variableValue = null; - return false; - } - - private static bool ContainsKey(string variable) => typeof(VersionVariables).GetProperty(variable) != null; - - public override string ToString() - { - var variablesType = typeof(VersionVariablesJsonModel); - var variables = new VersionVariablesJsonModel(); - - foreach (var (key, value) in this.GetProperties()) - { - variablesType.GetProperty(key)?.SetValue(variables, value); - } - - var serializeOptions = JsonSerializerOptions(); - - return JsonSerializer.Serialize(variables, serializeOptions); - } - - private static JsonSerializerOptions JsonSerializerOptions() - { - var serializeOptions = new JsonSerializerOptions - { - WriteIndented = true, - Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, - Converters = { new VersionVariablesJsonStringConverter() } - }; - return serializeOptions; - } -} diff --git a/src/GitVersion.Core/Model/VersionVariablesJsonModel.cs b/src/GitVersion.Core/Model/VersionVariablesJsonModel.cs deleted file mode 100644 index cbb451730b..0000000000 --- a/src/GitVersion.Core/Model/VersionVariablesJsonModel.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.Text.Json.Serialization; - -namespace GitVersion.OutputVariables; - -public class VersionVariablesJsonModel -{ - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? Major { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? Minor { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? Patch { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? PreReleaseTag { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? PreReleaseTagWithDash { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? PreReleaseLabel { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? PreReleaseLabelWithDash { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? PreReleaseNumber { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? WeightedPreReleaseNumber { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? BuildMetaData { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? BuildMetaDataPadded { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? FullBuildMetaData { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? MajorMinorPatch { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? SemVer { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? LegacySemVer { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? LegacySemVerPadded { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? AssemblySemVer { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? AssemblySemFileVer { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? FullSemVer { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? InformationalVersion { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? BranchName { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? EscapedBranchName { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? Sha { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? ShortSha { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? NuGetVersionV2 { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? NuGetVersion { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? NuGetPreReleaseTagV2 { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? NuGetPreReleaseTag { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? VersionSourceSha { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? CommitsSinceVersionSource { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? CommitsSinceVersionSourcePadded { get; set; } - [JsonConverter(typeof(VersionVariablesJsonNumberConverter))] - public string? UncommittedChanges { get; set; } - [JsonConverter(typeof(VersionVariablesJsonStringConverter))] - public string? CommitDate { get; set; } -} diff --git a/src/GitVersion.Core/Model/VersionVariablesJsonNumberConverter.cs b/src/GitVersion.Core/Model/VersionVariablesJsonNumberConverter.cs deleted file mode 100644 index 6273f39be9..0000000000 --- a/src/GitVersion.Core/Model/VersionVariablesJsonNumberConverter.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Buffers; -using System.Buffers.Text; -using System.Text.Json; -using System.Text.Json.Serialization; -using GitVersion.Extensions; - -namespace GitVersion.OutputVariables; - -public class VersionVariablesJsonNumberConverter : JsonConverter -{ - public override bool CanConvert(Type typeToConvert) - => typeToConvert == typeof(string); - - public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) - { - if (reader.TokenType != JsonTokenType.Number && typeToConvert == typeof(string)) - return reader.GetString() ?? ""; - - var span = reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan; - if (Utf8Parser.TryParse(span, out long number, out var bytesConsumed) && span.Length == bytesConsumed) - return number.ToString(); - - var data = reader.GetString(); - - throw new InvalidOperationException($"'{data}' is not a correct expected value!") - { - Source = nameof(VersionVariablesJsonNumberConverter) - }; - } - - public override void Write(Utf8JsonWriter writer, string? value, JsonSerializerOptions options) - { - if (value.IsNullOrWhiteSpace()) - { - writer.WriteNullValue(); - } - else if (long.TryParse(value, out var number)) - { - writer.WriteNumberValue(number); - } - else - { - throw new InvalidOperationException($"'{value}' is not a correct expected value!") - { - Source = nameof(VersionVariablesJsonStringConverter) - }; - } - - } - - public override bool HandleNull => true; -} diff --git a/src/GitVersion.Core/Model/WixInfo.cs b/src/GitVersion.Core/Model/WixInfo.cs deleted file mode 100644 index 1ea011b4ed..0000000000 --- a/src/GitVersion.Core/Model/WixInfo.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace GitVersion; - -public class WixInfo -{ - public bool ShouldUpdate; -} diff --git a/src/GitVersion.Core/Model/AssemblyInfoData.cs b/src/GitVersion.Core/Options/AssemblySettingsInfo.cs similarity index 84% rename from src/GitVersion.Core/Model/AssemblyInfoData.cs rename to src/GitVersion.Core/Options/AssemblySettingsInfo.cs index a3453d10ed..6ebecfc00f 100644 --- a/src/GitVersion.Core/Model/AssemblyInfoData.cs +++ b/src/GitVersion.Core/Options/AssemblySettingsInfo.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public class AssemblyInfoData +public class AssemblySettingsInfo { public bool UpdateAssemblyInfo; public bool UpdateProjectFiles; diff --git a/src/GitVersion.Core/Options/ConfigurationInfo.cs b/src/GitVersion.Core/Options/ConfigurationInfo.cs new file mode 100644 index 0000000000..a7e19756de --- /dev/null +++ b/src/GitVersion.Core/Options/ConfigurationInfo.cs @@ -0,0 +1,8 @@ +namespace GitVersion; + +public record ConfigurationInfo +{ + public string? ConfigurationFile; + public bool ShowConfiguration; + public IReadOnlyDictionary? OverrideConfiguration; +} diff --git a/src/GitVersion.Core/Options/FileWriteInfo.cs b/src/GitVersion.Core/Options/FileWriteInfo.cs new file mode 100644 index 0000000000..7a81b8b411 --- /dev/null +++ b/src/GitVersion.Core/Options/FileWriteInfo.cs @@ -0,0 +1,3 @@ +namespace GitVersion; + +public sealed record FileWriteInfo(string WorkingDirectory, string FileName, string FileExtension); diff --git a/src/GitVersion.Core/Model/GitVersionOptions.cs b/src/GitVersion.Core/Options/GitVersionOptions.cs similarity index 61% rename from src/GitVersion.Core/Model/GitVersionOptions.cs rename to src/GitVersion.Core/Options/GitVersionOptions.cs index b0cba50076..1fc689dbd7 100644 --- a/src/GitVersion.Core/Model/GitVersionOptions.cs +++ b/src/GitVersion.Core/Options/GitVersionOptions.cs @@ -1,26 +1,26 @@ +using GitVersion.Git; using GitVersion.Logging; -using GitVersion.Model; namespace GitVersion; public class GitVersionOptions { - public string WorkingDirectory { get; set; } = System.Environment.CurrentDirectory; + public string WorkingDirectory { get; set; } = SysEnv.CurrentDirectory; + public AssemblySettingsInfo AssemblySettingsInfo { get; } = new(); + public AuthenticationInfo AuthenticationInfo { get; } = new(); - public AssemblyInfoData AssemblyInfo { get; } = new(); - public AuthenticationInfo Authentication { get; } = new(); - public ConfigInfo ConfigInfo { get; } = new(); + public ConfigurationInfo ConfigurationInfo { get; } = new(); public RepositoryInfo RepositoryInfo { get; } = new(); public WixInfo WixInfo { get; } = new(); public Settings Settings { get; } = new(); - public bool Init; public bool Diag; public bool IsVersion; public bool IsHelp; public string? LogFilePath; public string? ShowVariable; + public string? Format; public string? OutputFile; public ISet Output = new HashSet(); public Verbosity Verbosity = Verbosity.Normal; diff --git a/src/GitVersion.Core/Model/OutputType.cs b/src/GitVersion.Core/Options/OutputType.cs similarity index 69% rename from src/GitVersion.Core/Model/OutputType.cs rename to src/GitVersion.Core/Options/OutputType.cs index e7cea06b7d..bb72800fc7 100644 --- a/src/GitVersion.Core/Model/OutputType.cs +++ b/src/GitVersion.Core/Options/OutputType.cs @@ -1,4 +1,4 @@ -namespace GitVersion.Model; +namespace GitVersion; public enum OutputType { diff --git a/src/GitVersion.Core/Model/RepositoryInfo.cs b/src/GitVersion.Core/Options/RepositoryInfo.cs similarity index 83% rename from src/GitVersion.Core/Model/RepositoryInfo.cs rename to src/GitVersion.Core/Options/RepositoryInfo.cs index bc0991236e..4551ff8e11 100644 --- a/src/GitVersion.Core/Model/RepositoryInfo.cs +++ b/src/GitVersion.Core/Options/RepositoryInfo.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public class RepositoryInfo +public record RepositoryInfo { public string? TargetUrl; public string? TargetBranch; diff --git a/src/GitVersion.Core/Model/Settings.cs b/src/GitVersion.Core/Options/Settings.cs similarity index 86% rename from src/GitVersion.Core/Model/Settings.cs rename to src/GitVersion.Core/Options/Settings.cs index 22b198edc3..58ded50c19 100644 --- a/src/GitVersion.Core/Model/Settings.cs +++ b/src/GitVersion.Core/Options/Settings.cs @@ -1,6 +1,6 @@ namespace GitVersion; -public class Settings +public record Settings { public bool NoFetch; public bool NoCache; diff --git a/src/GitVersion.Core/Options/WixInfo.cs b/src/GitVersion.Core/Options/WixInfo.cs new file mode 100644 index 0000000000..8fa95b2851 --- /dev/null +++ b/src/GitVersion.Core/Options/WixInfo.cs @@ -0,0 +1,6 @@ +namespace GitVersion; + +public record WixInfo +{ + public bool UpdateWixVersionFile; +} diff --git a/src/GitVersion.Core/VersionConverters/IConverterContext.cs b/src/GitVersion.Core/Output/IConverterContext.cs similarity index 67% rename from src/GitVersion.Core/VersionConverters/IConverterContext.cs rename to src/GitVersion.Core/Output/IConverterContext.cs index bcf3165e58..2df5562e71 100644 --- a/src/GitVersion.Core/VersionConverters/IConverterContext.cs +++ b/src/GitVersion.Core/Output/IConverterContext.cs @@ -1,4 +1,4 @@ -namespace GitVersion.VersionConverters; +namespace GitVersion; public interface IConverterContext { diff --git a/src/GitVersion.Core/VersionConverters/IVersionConverter.cs b/src/GitVersion.Core/Output/IVersionConverter.cs similarity index 54% rename from src/GitVersion.Core/VersionConverters/IVersionConverter.cs rename to src/GitVersion.Core/Output/IVersionConverter.cs index ff0428d6b8..34d34a8454 100644 --- a/src/GitVersion.Core/VersionConverters/IVersionConverter.cs +++ b/src/GitVersion.Core/Output/IVersionConverter.cs @@ -1,8 +1,8 @@ using GitVersion.OutputVariables; -namespace GitVersion.VersionConverters; +namespace GitVersion; public interface IVersionConverter : IDisposable where T : IConverterContext { - public void Execute(VersionVariables variables, T context); + public void Execute(GitVersionVariables variables, T context); } diff --git a/src/GitVersion.Core/OutputVariables/GitVersionVariables.cs b/src/GitVersion.Core/OutputVariables/GitVersionVariables.cs new file mode 100644 index 0000000000..53a8b55172 --- /dev/null +++ b/src/GitVersion.Core/OutputVariables/GitVersionVariables.cs @@ -0,0 +1,97 @@ +namespace GitVersion.OutputVariables; + +public record GitVersionVariables(string Major, + string Minor, + string Patch, + string? BuildMetaData, + string? FullBuildMetaData, + string? BranchName, + string? EscapedBranchName, + string? Sha, + string? ShortSha, + string MajorMinorPatch, + string SemVer, + string FullSemVer, + string? AssemblySemVer, + string? AssemblySemFileVer, + string? PreReleaseTag, + string? PreReleaseTagWithDash, + string? PreReleaseLabel, + string? PreReleaseLabelWithDash, + string? PreReleaseNumber, + string WeightedPreReleaseNumber, + string? InformationalVersion, + string? CommitDate, + string? VersionSourceSha, + string? CommitsSinceVersionSource, + string? UncommittedChanges) : IEnumerable> +{ + internal static readonly List AvailableVariables = + [ + nameof(Major), + nameof(Minor), + nameof(Patch), + nameof(BuildMetaData), + nameof(FullBuildMetaData), + nameof(BranchName), + nameof(EscapedBranchName), + nameof(Sha), + nameof(ShortSha), + nameof(MajorMinorPatch), + nameof(SemVer), + nameof(FullSemVer), + nameof(AssemblySemVer), + nameof(AssemblySemFileVer), + nameof(PreReleaseTag), + nameof(PreReleaseTagWithDash), + nameof(PreReleaseLabel), + nameof(PreReleaseLabelWithDash), + nameof(PreReleaseNumber), + nameof(WeightedPreReleaseNumber), + nameof(InformationalVersion), + nameof(CommitDate), + nameof(VersionSourceSha), + nameof(CommitsSinceVersionSource), + nameof(UncommittedChanges) + ]; + + private Dictionary Instance => new() + { + { nameof(Major), Major }, + { nameof(Minor), Minor }, + { nameof(Patch), Patch }, + { nameof(BuildMetaData), BuildMetaData }, + { nameof(FullBuildMetaData), FullBuildMetaData }, + { nameof(BranchName), BranchName }, + { nameof(EscapedBranchName), EscapedBranchName }, + { nameof(Sha), Sha }, + { nameof(ShortSha), ShortSha }, + { nameof(MajorMinorPatch), MajorMinorPatch }, + { nameof(SemVer), SemVer }, + { nameof(FullSemVer), FullSemVer }, + { nameof(AssemblySemVer), AssemblySemVer }, + { nameof(AssemblySemFileVer), AssemblySemFileVer }, + { nameof(PreReleaseTag), PreReleaseTag }, + { nameof(PreReleaseTagWithDash), PreReleaseTagWithDash }, + { nameof(PreReleaseLabel), PreReleaseLabel }, + { nameof(PreReleaseLabelWithDash), PreReleaseLabelWithDash }, + { nameof(PreReleaseNumber), PreReleaseNumber }, + { nameof(WeightedPreReleaseNumber), WeightedPreReleaseNumber }, + { nameof(InformationalVersion), InformationalVersion }, + { nameof(CommitDate), CommitDate }, + { nameof(VersionSourceSha), VersionSourceSha }, + { nameof(CommitsSinceVersionSource), CommitsSinceVersionSource }, + { nameof(UncommittedChanges), UncommittedChanges } + }; + + public IEnumerator> GetEnumerator() => Instance.GetEnumerator(); + + IEnumerator IEnumerable.GetEnumerator() => Instance.GetEnumerator(); + + public bool TryGetValue(string variable, out string? variableValue) + { + if (Instance.TryGetValue(variable, out variableValue)) return true; + variableValue = null; + return false; + } +} diff --git a/src/GitVersion.Core/OutputVariables/IVersionVariableSerializer.cs b/src/GitVersion.Core/OutputVariables/IVersionVariableSerializer.cs new file mode 100644 index 0000000000..af0bd89ad7 --- /dev/null +++ b/src/GitVersion.Core/OutputVariables/IVersionVariableSerializer.cs @@ -0,0 +1,9 @@ +namespace GitVersion.OutputVariables; + +public interface IVersionVariableSerializer +{ + GitVersionVariables FromJson(string json); + string ToJson(GitVersionVariables gitVersionVariables); + GitVersionVariables FromFile(string filePath); + void ToFile(GitVersionVariables gitVersionVariables, string filePath); +} diff --git a/src/GitVersion.Core/PublicAPI.Shipped.txt b/src/GitVersion.Core/PublicAPI.Shipped.txt index 0c9b73897a..7dc5c58110 100644 --- a/src/GitVersion.Core/PublicAPI.Shipped.txt +++ b/src/GitVersion.Core/PublicAPI.Shipped.txt @@ -1,1416 +1 @@ #nullable enable -abstract GitVersion.BuildAgents.BuildAgentBase.EnvironmentVariable.get -> string! -abstract GitVersion.BuildAgents.BuildAgentBase.GenerateSetParameterMessage(string! name, string! value) -> string![]! -abstract GitVersion.BuildAgents.BuildAgentBase.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string? -abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.DefaultResult.get -> string? -abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -abstract GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -abstract GitVersion.GitVersionModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -abstract GitVersion.VersionCalculation.VersionStrategyBase.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -const GitVersion.BuildAgents.AppVeyor.EnvironmentVariableName = "APPVEYOR" -> string! -const GitVersion.BuildAgents.AzurePipelines.EnvironmentVariableName = "TF_BUILD" -> string! -const GitVersion.BuildAgents.BitBucketPipelines.BranchEnvironmentVariableName = "BITBUCKET_BRANCH" -> string! -const GitVersion.BuildAgents.BitBucketPipelines.EnvironmentVariableName = "BITBUCKET_WORKSPACE" -> string! -const GitVersion.BuildAgents.BitBucketPipelines.PullRequestEnvironmentVariableName = "BITBUCKET_PR_ID" -> string! -const GitVersion.BuildAgents.BitBucketPipelines.TagEnvironmentVariableName = "BITBUCKET_TAG" -> string! -const GitVersion.BuildAgents.BuildKite.EnvironmentVariableName = "BUILDKITE" -> string! -const GitVersion.BuildAgents.CodeBuild.SourceVersionEnvironmentVariableName = "CODEBUILD_SOURCE_VERSION" -> string! -const GitVersion.BuildAgents.CodeBuild.WebHookEnvironmentVariableName = "CODEBUILD_WEBHOOK_HEAD_REF" -> string! -const GitVersion.BuildAgents.ContinuaCi.EnvironmentVariableName = "ContinuaCI.Version" -> string! -const GitVersion.BuildAgents.Drone.EnvironmentVariableName = "DRONE" -> string! -const GitVersion.BuildAgents.EnvRun.EnvironmentVariableName = "ENVRUN_DATABASE" -> string! -const GitVersion.BuildAgents.GitHubActions.EnvironmentVariableName = "GITHUB_ACTIONS" -> string! -const GitVersion.BuildAgents.GitHubActions.GitHubSetEnvTempFileEnvironmentVariableName = "GITHUB_ENV" -> string! -const GitVersion.BuildAgents.GitLabCi.EnvironmentVariableName = "GITLAB_CI" -> string! -const GitVersion.BuildAgents.Jenkins.EnvironmentVariableName = "JENKINS_URL" -> string! -const GitVersion.BuildAgents.MyGet.EnvironmentVariableName = "BuildRunner" -> string! -const GitVersion.BuildAgents.SpaceAutomation.EnvironmentVariableName = "JB_SPACE_PROJECT_KEY" -> string! -const GitVersion.BuildAgents.TeamCity.EnvironmentVariableName = "TEAMCITY_VERSION" -> string! -const GitVersion.BuildAgents.TravisCi.EnvironmentVariableName = "TRAVIS" -> string! -const GitVersion.Configuration.ConfigFileLocator.DefaultFileName = "GitVersion.yml" -> string! -const GitVersion.Model.Configuration.Config.DefaultTagPrefix = "[vV]" -> string! -const GitVersion.Model.Configuration.Config.DevelopBranchKey = "develop" -> string! -const GitVersion.Model.Configuration.Config.DevelopBranchRegex = "^dev(elop)?(ment)?$" -> string! -const GitVersion.Model.Configuration.Config.FeatureBranchKey = "feature" -> string! -const GitVersion.Model.Configuration.Config.FeatureBranchRegex = "^features?[/-]" -> string! -const GitVersion.Model.Configuration.Config.HotfixBranchKey = "hotfix" -> string! -const GitVersion.Model.Configuration.Config.HotfixBranchRegex = "^hotfix(es)?[/-]" -> string! -const GitVersion.Model.Configuration.Config.MainBranchKey = "main" -> string! -const GitVersion.Model.Configuration.Config.MainBranchRegex = "^master$|^main$" -> string! -const GitVersion.Model.Configuration.Config.MasterBranchKey = "master" -> string! -const GitVersion.Model.Configuration.Config.PullRequestBranchKey = "pull-request" -> string! -const GitVersion.Model.Configuration.Config.PullRequestRegex = "^(pull|pull\\-requests|pr)[/-]" -> string! -const GitVersion.Model.Configuration.Config.ReleaseBranchKey = "release" -> string! -const GitVersion.Model.Configuration.Config.ReleaseBranchRegex = "^releases?[/-]" -> string! -const GitVersion.Model.Configuration.Config.SupportBranchKey = "support" -> string! -const GitVersion.Model.Configuration.Config.SupportBranchRegex = "^support[/-]" -> string! -const GitVersion.VersionCalculation.IncrementStrategyFinder.DefaultMajorPattern = "\\+semver:\\s?(breaking|major)" -> string! -const GitVersion.VersionCalculation.IncrementStrategyFinder.DefaultMinorPattern = "\\+semver:\\s?(feature|minor)" -> string! -const GitVersion.VersionCalculation.IncrementStrategyFinder.DefaultNoBumpPattern = "\\+semver:\\s?(none|skip)" -> string! -const GitVersion.VersionCalculation.IncrementStrategyFinder.DefaultPatchPattern = "\\+semver:\\s?(fix|patch)" -> string! -const GitVersion.VersionCalculation.MergeMessageVersionStrategy.MergeMessageStrategyPrefix = "Merge message" -> string! -const GitVersion.VersionConverters.WixUpdater.WixVersionFileUpdater.WixVersionFileName = "GitVersion_WixVersion.wxi" -> string! -GitVersion.AssemblyInfoData -GitVersion.AssemblyInfoData.AssemblyInfoData() -> void -GitVersion.AssemblyInfoData.EnsureAssemblyInfo -> bool -GitVersion.AssemblyInfoData.Files -> System.Collections.Generic.ISet! -GitVersion.AssemblyInfoData.UpdateAssemblyInfo -> bool -GitVersion.AssemblyInfoData.UpdateProjectFiles -> bool -GitVersion.AuthenticationInfo -GitVersion.AuthenticationInfo.AuthenticationInfo() -> void -GitVersion.AuthenticationInfo.Password.get -> string? -GitVersion.AuthenticationInfo.Password.set -> void -GitVersion.AuthenticationInfo.Token.get -> string? -GitVersion.AuthenticationInfo.Token.set -> void -GitVersion.AuthenticationInfo.Username.get -> string? -GitVersion.AuthenticationInfo.Username.set -> void -GitVersion.BranchCommit -GitVersion.BranchCommit.Branch.get -> GitVersion.IBranch! -GitVersion.BranchCommit.BranchCommit() -> void -GitVersion.BranchCommit.BranchCommit(GitVersion.ICommit! commit, GitVersion.IBranch! branch) -> void -GitVersion.BranchCommit.Commit.get -> GitVersion.ICommit! -GitVersion.BranchCommit.Equals(GitVersion.BranchCommit? other) -> bool -GitVersion.BugException -GitVersion.BugException.BugException(string! message) -> void -GitVersion.BuildAgents.AppVeyor -GitVersion.BuildAgents.AppVeyor.AppVeyor(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.AzurePipelines -GitVersion.BuildAgents.AzurePipelines.AzurePipelines(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.BitBucketPipelines -GitVersion.BuildAgents.BitBucketPipelines.BitBucketPipelines(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.BitBucketPipelines.WithPropertyFile(string! propertiesFileName) -> void -GitVersion.BuildAgents.BuildAgentBase -GitVersion.BuildAgents.BuildAgentBase.BuildAgentBase(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.BuildAgentBase.Environment.get -> GitVersion.IEnvironment! -GitVersion.BuildAgents.BuildAgentBase.GenerateBuildLogOutput(GitVersion.OutputVariables.VersionVariables! variables) -> System.Collections.Generic.IEnumerable! -GitVersion.BuildAgents.BuildAgentResolver -GitVersion.BuildAgents.BuildAgentResolver.BuildAgentResolver(System.Collections.Generic.IEnumerable! buildAgents, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.BuildAgentResolver.Resolve() -> GitVersion.BuildAgents.ICurrentBuildAgent! -GitVersion.BuildAgents.BuildKite -GitVersion.BuildAgents.BuildKite.BuildKite(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.BuildServerModule -GitVersion.BuildAgents.BuildServerModule.BuildServerModule() -> void -GitVersion.BuildAgents.CodeBuild -GitVersion.BuildAgents.CodeBuild.CodeBuild(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.CodeBuild.WithPropertyFile(string! propertiesFileName) -> void -GitVersion.BuildAgents.ContinuaCi -GitVersion.BuildAgents.ContinuaCi.ContinuaCi(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.Drone -GitVersion.BuildAgents.Drone.Drone(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.EnvRun -GitVersion.BuildAgents.EnvRun.EnvRun(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.GitHubActions -GitVersion.BuildAgents.GitHubActions.GitHubActions(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.GitLabCi -GitVersion.BuildAgents.GitLabCi.GitLabCi(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.GitLabCi.WithPropertyFile(string! propertiesFileName) -> void -GitVersion.BuildAgents.IBuildAgent -GitVersion.BuildAgents.IBuildAgent.CanApplyToCurrentContext() -> bool -GitVersion.BuildAgents.IBuildAgent.GetCurrentBranch(bool usingDynamicRepos) -> string? -GitVersion.BuildAgents.IBuildAgent.PreventFetch() -> bool -GitVersion.BuildAgents.IBuildAgent.ShouldCleanUpRemotes() -> bool -GitVersion.BuildAgents.IBuildAgent.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -GitVersion.BuildAgents.IBuildAgentResolver -GitVersion.BuildAgents.IBuildAgentResolver.Resolve() -> GitVersion.BuildAgents.ICurrentBuildAgent! -GitVersion.BuildAgents.ICurrentBuildAgent -GitVersion.BuildAgents.Jenkins -GitVersion.BuildAgents.Jenkins.Jenkins(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.Jenkins.WithPropertyFile(string! propertiesFileName) -> void -GitVersion.BuildAgents.LocalBuild -GitVersion.BuildAgents.LocalBuild.LocalBuild(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.MyGet -GitVersion.BuildAgents.MyGet.MyGet(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.SpaceAutomation -GitVersion.BuildAgents.SpaceAutomation.SpaceAutomation(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.TeamCity -GitVersion.BuildAgents.TeamCity.TeamCity(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.BuildAgents.TravisCi -GitVersion.BuildAgents.TravisCi.TravisCi(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.Cache.GitVersionCacheKey -GitVersion.Cache.GitVersionCacheKey.GitVersionCacheKey(string! value) -> void -GitVersion.Cache.GitVersionCacheKey.Value.get -> string! -GitVersion.CommitFilter -GitVersion.CommitFilter.CommitFilter() -> void -GitVersion.CommitFilter.ExcludeReachableFrom.get -> object? -GitVersion.CommitFilter.ExcludeReachableFrom.set -> void -GitVersion.CommitFilter.FirstParentOnly.get -> bool -GitVersion.CommitFilter.FirstParentOnly.set -> void -GitVersion.CommitFilter.IncludeReachableFrom.get -> object? -GitVersion.CommitFilter.IncludeReachableFrom.set -> void -GitVersion.CommitFilter.SortBy.get -> GitVersion.CommitSortStrategies -GitVersion.CommitFilter.SortBy.set -> void -GitVersion.CommitSortStrategies -GitVersion.CommitSortStrategies.None = 0 -> GitVersion.CommitSortStrategies -GitVersion.CommitSortStrategies.Reverse = 4 -> GitVersion.CommitSortStrategies -GitVersion.CommitSortStrategies.Time = 2 -> GitVersion.CommitSortStrategies -GitVersion.CommitSortStrategies.Topological = 1 -> GitVersion.CommitSortStrategies -GitVersion.Common.IRepositoryStore -GitVersion.Common.IRepositoryStore.ExcludingBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.FindBranch(string? branchName) -> GitVersion.IBranch? -GitVersion.Common.IRepositoryStore.FindCommitBranchWasBranchedFrom(GitVersion.IBranch? branch, GitVersion.Model.Configuration.Config! configuration, params GitVersion.IBranch![]! excludedBranches) -> GitVersion.BranchCommit -GitVersion.Common.IRepositoryStore.FindMainBranch(GitVersion.Model.Configuration.Config! configuration) -> GitVersion.IBranch? -GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.IBranch? branch, GitVersion.IBranch? otherBranch) -> GitVersion.ICommit? -GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.ICommit! commit, GitVersion.ICommit! mainlineTip) -> GitVersion.ICommit? -GitVersion.Common.IRepositoryStore.GetBaseVersionSource(GitVersion.ICommit! currentBranchTip) -> GitVersion.ICommit! -GitVersion.Common.IRepositoryStore.GetBranchesContainingCommit(GitVersion.ICommit? commit, System.Collections.Generic.IEnumerable? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetBranchesForCommit(GitVersion.ICommit! commit) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetChosenBranch(GitVersion.Model.Configuration.Config! configuration) -> GitVersion.IBranch? -GitVersion.Common.IRepositoryStore.GetCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? currentCommit) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetCurrentCommit(GitVersion.IBranch! currentBranch, string? commitId) -> GitVersion.ICommit? -GitVersion.Common.IRepositoryStore.GetCurrentCommitTaggedVersion(GitVersion.ICommit? commit, string? tagPrefix, bool handleDetachedBranch) -> GitVersion.SemanticVersion! -GitVersion.Common.IRepositoryStore.GetExcludedInheritBranches(GitVersion.Model.Configuration.Config! configuration) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable>? mainlineBranchConfigs) -> System.Collections.Generic.IDictionary!>! -GitVersion.Common.IRepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetNumberOfUncommittedChanges() -> int -GitVersion.Common.IRepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.GetTargetBranch(string? targetBranchName) -> GitVersion.IBranch! -GitVersion.Common.IRepositoryStore.GetValidVersionTags(string? tagPrefixRegex, System.DateTimeOffset? olderThan = null) -> System.Collections.Generic.IEnumerable<(GitVersion.ITag! Tag, GitVersion.SemanticVersion! Semver, GitVersion.ICommit! Commit)>! -GitVersion.Common.IRepositoryStore.GetVersionTagsOnBranch(GitVersion.IBranch! branch, string? tagPrefixRegex) -> System.Collections.Generic.IEnumerable! -GitVersion.Common.IRepositoryStore.IsCommitOnBranch(GitVersion.ICommit? baseVersionSource, GitVersion.IBranch! branch, GitVersion.ICommit! firstMatchingCommit) -> bool -GitVersion.ConfigInfo -GitVersion.ConfigInfo.ConfigFile -> string? -GitVersion.ConfigInfo.ConfigInfo() -> void -GitVersion.ConfigInfo.OverrideConfig -> GitVersion.Model.Configuration.Config? -GitVersion.ConfigInfo.ShowConfig -> bool -GitVersion.Configuration.BranchConfigurationCalculator -GitVersion.Configuration.BranchConfigurationCalculator.BranchConfigurationCalculator(GitVersion.Logging.ILog! log, GitVersion.Common.IRepositoryStore! repositoryStore) -> void -GitVersion.Configuration.BranchConfigurationCalculator.GetBranchConfiguration(GitVersion.IBranch! targetBranch, GitVersion.ICommit? currentCommit, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IList? excludedInheritBranches = null) -> GitVersion.Model.Configuration.BranchConfig! -GitVersion.Configuration.ConfigExtensions -GitVersion.Configuration.ConfigFileLocator -GitVersion.Configuration.ConfigFileLocator.ConfigFileLocator(GitVersion.IFileSystem! fileSystem, Microsoft.Extensions.Options.IOptions! options) -> void -GitVersion.Configuration.ConfigFileLocator.FilePath.get -> string! -GitVersion.Configuration.ConfigFileLocator.GetConfigFilePath(string? workingDirectory) -> string? -GitVersion.Configuration.ConfigFileLocator.HasConfigFileAt(string! workingDirectory) -> bool -GitVersion.Configuration.ConfigFileLocator.ReadConfig(string! workingDirectory) -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.ConfigFileLocator.SelectConfigFilePath(GitVersion.GitVersionOptions! gitVersionOptions, GitVersion.IGitRepositoryInfo! repositoryInfo) -> string? -GitVersion.Configuration.ConfigFileLocator.Verify(GitVersion.GitVersionOptions! gitVersionOptions, GitVersion.IGitRepositoryInfo! repositoryInfo) -> void -GitVersion.Configuration.ConfigFileLocator.Verify(string? workingDirectory, string? projectRootDirectory) -> void -GitVersion.Configuration.ConfigProvider -GitVersion.Configuration.ConfigProvider.ConfigProvider(GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.IConfigFileLocator! configFileLocator, Microsoft.Extensions.Options.IOptions! options, GitVersion.Configuration.Init.Wizard.IConfigInitWizard! configInitWizard, GitVersion.IGitRepositoryInfo! repositoryInfo) -> void -GitVersion.Configuration.ConfigProvider.Init(string! workingDirectory) -> void -GitVersion.Configuration.ConfigProvider.Provide(GitVersion.Model.Configuration.Config? overrideConfig = null) -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.ConfigProvider.Provide(string? workingDirectory, GitVersion.Model.Configuration.Config? overrideConfig = null) -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.ConfigSerializer -GitVersion.Configuration.ConfigSerializer.ConfigSerializer() -> void -GitVersion.Configuration.ConfigurationBuilder -GitVersion.Configuration.ConfigurationBuilder.Add(GitVersion.Model.Configuration.Config! config) -> GitVersion.Configuration.ConfigurationBuilder! -GitVersion.Configuration.ConfigurationBuilder.Build() -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.ConfigurationBuilder.ConfigurationBuilder() -> void -GitVersion.Configuration.ConfigurationException -GitVersion.Configuration.ConfigurationException.ConfigurationException(string! msg) -> void -GitVersion.Configuration.ConfigurationModule -GitVersion.Configuration.ConfigurationModule.ConfigurationModule() -> void -GitVersion.Configuration.ConfigurationModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.Configuration.IBranchConfigurationCalculator -GitVersion.Configuration.IBranchConfigurationCalculator.GetBranchConfiguration(GitVersion.IBranch! targetBranch, GitVersion.ICommit? currentCommit, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IList? excludedInheritBranches = null) -> GitVersion.Model.Configuration.BranchConfig! -GitVersion.Configuration.IConfigFileLocator -GitVersion.Configuration.IConfigFileLocator.FilePath.get -> string! -GitVersion.Configuration.IConfigFileLocator.GetConfigFilePath(string! workingDirectory) -> string? -GitVersion.Configuration.IConfigFileLocator.HasConfigFileAt(string! workingDirectory) -> bool -GitVersion.Configuration.IConfigFileLocator.ReadConfig(string! workingDirectory) -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.IConfigFileLocator.SelectConfigFilePath(GitVersion.GitVersionOptions! gitVersionOptions, GitVersion.IGitRepositoryInfo! repositoryInfo) -> string? -GitVersion.Configuration.IConfigFileLocator.Verify(GitVersion.GitVersionOptions! gitVersionOptions, GitVersion.IGitRepositoryInfo! repositoryInfo) -> void -GitVersion.Configuration.IConfigFileLocator.Verify(string! workingDirectory, string! projectRootDirectory) -> void -GitVersion.Configuration.IConfigProvider -GitVersion.Configuration.IConfigProvider.Init(string! workingDirectory) -> void -GitVersion.Configuration.IConfigProvider.Provide(GitVersion.Model.Configuration.Config? overrideConfig = null) -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.IConfigProvider.Provide(string! workingDirectory, GitVersion.Model.Configuration.Config? overrideConfig = null) -> GitVersion.Model.Configuration.Config! -GitVersion.Configuration.Init.EditConfigStep -GitVersion.Configuration.Init.EditConfigStep.EditConfigStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.GitVersionInitModule -GitVersion.Configuration.Init.GitVersionInitModule.GitVersionInitModule() -> void -GitVersion.Configuration.Init.SetConfig.AssemblyVersioningSchemeSetting -GitVersion.Configuration.Init.SetConfig.AssemblyVersioningSchemeSetting.AssemblyVersioningSchemeSetting(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.SetConfig.ConfigureBranch -GitVersion.Configuration.Init.SetConfig.ConfigureBranch.ConfigureBranch(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.SetConfig.ConfigureBranch.WithData(string! configName, GitVersion.Model.Configuration.BranchConfig! config) -> GitVersion.Configuration.Init.SetConfig.ConfigureBranch! -GitVersion.Configuration.Init.SetConfig.ConfigureBranches -GitVersion.Configuration.Init.SetConfig.ConfigureBranches.ConfigureBranches(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.SetConfig.GlobalModeSetting -GitVersion.Configuration.Init.SetConfig.GlobalModeSetting.GlobalModeSetting(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.SetConfig.GlobalModeSetting.WithData(GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep! returnStep, bool isPartOfTheWizard) -> GitVersion.Configuration.Init.SetConfig.GlobalModeSetting! -GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode -GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode.SetBranchIncrementMode(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode.WithData(string! configName, GitVersion.Model.Configuration.BranchConfig! config) -> GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode! -GitVersion.Configuration.Init.SetConfig.SetBranchTag -GitVersion.Configuration.Init.SetConfig.SetBranchTag.SetBranchTag(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.SetConfig.SetBranchTag.WithData(string! configName, GitVersion.Model.Configuration.BranchConfig! config) -> GitVersion.Configuration.Init.SetConfig.SetBranchTag! -GitVersion.Configuration.Init.SetNextVersion -GitVersion.Configuration.Init.SetNextVersion.SetNextVersion(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.StepResult -GitVersion.Configuration.Init.StepResult.Exit.get -> bool -GitVersion.Configuration.Init.StepResult.InvalidResponse.get -> bool -GitVersion.Configuration.Init.StepResult.Save.get -> bool -GitVersion.Configuration.Init.Wizard.ConfigInitStepFactory -GitVersion.Configuration.Init.Wizard.ConfigInitStepFactory.ConfigInitStepFactory() -> void -GitVersion.Configuration.Init.Wizard.ConfigInitStepFactory.ConfigInitStepFactory(System.IServiceProvider! sp) -> void -GitVersion.Configuration.Init.Wizard.ConfigInitStepFactory.CreateStep() -> T -GitVersion.Configuration.Init.Wizard.ConfigInitWizard -GitVersion.Configuration.Init.Wizard.ConfigInitWizard.ConfigInitWizard(GitVersion.Logging.IConsole! console, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.ConfigInitWizard.Run(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Model.Configuration.Config? -GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep -GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.Apply(System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> bool -GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.ConfigInitWizardStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.FinishedSetupStep -GitVersion.Configuration.Init.Wizard.FinishedSetupStep.FinishedSetupStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.GitFlowSetupStep -GitVersion.Configuration.Init.Wizard.GitFlowSetupStep.GitFlowSetupStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.GitHubFlowStep -GitVersion.Configuration.Init.Wizard.GitHubFlowStep.GitHubFlowStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory -GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory.CreateStep() -> T -GitVersion.Configuration.Init.Wizard.IConfigInitWizard -GitVersion.Configuration.Init.Wizard.IConfigInitWizard.Run(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Model.Configuration.Config? -GitVersion.Configuration.Init.Wizard.PickBranchingStrategy1Step -GitVersion.Configuration.Init.Wizard.PickBranchingStrategy1Step.PickBranchingStrategy1Step(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.PickBranchingStrategy2Step -GitVersion.Configuration.Init.Wizard.PickBranchingStrategy2Step.PickBranchingStrategy2Step(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.PickBranchingStrategy3Step -GitVersion.Configuration.Init.Wizard.PickBranchingStrategy3Step.PickBranchingStrategy3Step(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Configuration.Init.Wizard.PickBranchingStrategyStep -GitVersion.Configuration.Init.Wizard.PickBranchingStrategyStep.PickBranchingStrategyStep(GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! stepFactory) -> void -GitVersion.Environment -GitVersion.Environment.Environment() -> void -GitVersion.Environment.GetEnvironmentVariable(string! variableName) -> string? -GitVersion.Environment.SetEnvironmentVariable(string! variableName, string? value) -> void -GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Extensions.AssemblyFileVersioningScheme.Major = 3 -> GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Extensions.AssemblyFileVersioningScheme.MajorMinor = 2 -> GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Extensions.AssemblyFileVersioningScheme.MajorMinorPatch = 1 -> GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Extensions.AssemblyFileVersioningScheme.MajorMinorPatchTag = 0 -> GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Extensions.AssemblyFileVersioningScheme.None = 4 -> GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Extensions.AssemblyVersioningScheme.Major = 3 -> GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Extensions.AssemblyVersioningScheme.MajorMinor = 2 -> GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Extensions.AssemblyVersioningScheme.MajorMinorPatch = 1 -> GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Extensions.AssemblyVersioningScheme.MajorMinorPatchTag = 0 -> GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Extensions.AssemblyVersioningScheme.None = 4 -> GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Extensions.AssemblyVersionsGeneratorExtensions -GitVersion.Extensions.CommonExtensions -GitVersion.Extensions.DictionaryExtensions -GitVersion.Extensions.EnumerableExtensions -GitVersion.Extensions.GitExtensions -GitVersion.Extensions.ObjectExtensions -GitVersion.Extensions.ReadEmbeddedResourceExtensions -GitVersion.Extensions.ServiceCollectionExtensions -GitVersion.Extensions.StringExtensions -GitVersion.FileSystem -GitVersion.FileSystem.Copy(string! from, string! to, bool overwrite) -> void -GitVersion.FileSystem.CreateDirectory(string! path) -> void -GitVersion.FileSystem.Delete(string! path) -> void -GitVersion.FileSystem.DirectoryEnumerateFiles(string? directory, string! searchPattern, System.IO.SearchOption searchOption) -> System.Collections.Generic.IEnumerable! -GitVersion.FileSystem.DirectoryExists(string! path) -> bool -GitVersion.FileSystem.Exists(string! file) -> bool -GitVersion.FileSystem.FileSystem() -> void -GitVersion.FileSystem.GetLastDirectoryWrite(string! path) -> long -GitVersion.FileSystem.Move(string! from, string! to) -> void -GitVersion.FileSystem.OpenRead(string! path) -> System.IO.Stream! -GitVersion.FileSystem.OpenWrite(string! path) -> System.IO.Stream! -GitVersion.FileSystem.PathsEqual(string? path, string? otherPath) -> bool -GitVersion.FileSystem.ReadAllText(string! path) -> string! -GitVersion.FileSystem.WriteAllText(string? file, string! fileContents) -> void -GitVersion.FileSystem.WriteAllText(string? file, string! fileContents, System.Text.Encoding! encoding) -> void -GitVersion.FileWriteInfo -GitVersion.FileWriteInfo.FileExtension.get -> string! -GitVersion.FileWriteInfo.FileName.get -> string! -GitVersion.FileWriteInfo.FileWriteInfo(string! workingDirectory, string! fileName, string! fileExtension) -> void -GitVersion.FileWriteInfo.WorkingDirectory.get -> string! -GitVersion.GitPreparer -GitVersion.GitPreparer.EnsureLocalBranchExistsForCurrentBranch(GitVersion.IRemote? remote, string? currentBranch) -> void -GitVersion.GitPreparer.GitPreparer(GitVersion.Logging.ILog! log, GitVersion.IEnvironment! environment, GitVersion.BuildAgents.ICurrentBuildAgent! buildAgent, Microsoft.Extensions.Options.IOptions! options, GitVersion.IMutatingGitRepository! repository, GitVersion.IGitRepositoryInfo! repositoryInfo, System.Lazy! versionContext) -> void -GitVersion.GitPreparer.Prepare() -> void -GitVersion.GitToolsException -GitVersion.GitToolsException.GitToolsException(string! message, System.Exception! innerException) -> void -GitVersion.GitToolsException.GitToolsException(string! messageFormat, params object![]! args) -> void -GitVersion.GitVersionCalculateTool -GitVersion.GitVersionCalculateTool.CalculateVersionVariables() -> GitVersion.OutputVariables.VersionVariables! -GitVersion.GitVersionCalculateTool.GitVersionCalculateTool(GitVersion.Logging.ILog! log, GitVersion.VersionCalculation.INextVersionCalculator! nextVersionCalculator, GitVersion.VersionCalculation.IVariableProvider! variableProvider, GitVersion.IGitPreparer! gitPreparer, GitVersion.VersionCalculation.Cache.IGitVersionCache! gitVersionCache, GitVersion.VersionCalculation.Cache.IGitVersionCacheKeyFactory! cacheKeyFactory, Microsoft.Extensions.Options.IOptions! options, System.Lazy! versionContext) -> void -GitVersion.GitVersionContext -GitVersion.GitVersionContext.CurrentBranch.get -> GitVersion.IBranch! -GitVersion.GitVersionContext.CurrentCommit.get -> GitVersion.ICommit? -GitVersion.GitVersionContext.CurrentCommitTaggedVersion.get -> GitVersion.SemanticVersion? -GitVersion.GitVersionContext.FullConfiguration.get -> GitVersion.Model.Configuration.Config! -GitVersion.GitVersionContext.GetEffectiveConfiguration(GitVersion.IBranch! branch) -> GitVersion.Model.Configuration.EffectiveConfiguration! -GitVersion.GitVersionContext.GitVersionContext(GitVersion.IBranch! currentBranch, GitVersion.ICommit? currentCommit, GitVersion.Model.Configuration.Config! configuration, GitVersion.SemanticVersion? currentCommitTaggedVersion, int numberOfUncommittedChanges) -> void -GitVersion.GitVersionContext.IsCurrentCommitTagged.get -> bool -GitVersion.GitVersionContext.NumberOfUncommittedChanges.get -> int -GitVersion.GitVersionContextFactory -GitVersion.GitVersionContextFactory.Create(GitVersion.GitVersionOptions! gitVersionOptions) -> GitVersion.GitVersionContext! -GitVersion.GitVersionContextFactory.GitVersionContextFactory(GitVersion.Configuration.IConfigProvider! configProvider, GitVersion.Common.IRepositoryStore! repositoryStore, Microsoft.Extensions.Options.IOptions! options) -> void -GitVersion.GitVersionCoreModule -GitVersion.GitVersionCoreModule.GitVersionCoreModule() -> void -GitVersion.GitVersionCoreModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.GitVersionException -GitVersion.GitVersionException.GitVersionException(string! message) -> void -GitVersion.GitVersionException.GitVersionException(string! message, System.Exception! innerException) -> void -GitVersion.GitVersionModule -GitVersion.GitVersionModule.GitVersionModule() -> void -GitVersion.GitVersionOptions -GitVersion.GitVersionOptions.AssemblyInfo.get -> GitVersion.AssemblyInfoData! -GitVersion.GitVersionOptions.Authentication.get -> GitVersion.AuthenticationInfo! -GitVersion.GitVersionOptions.ConfigInfo.get -> GitVersion.ConfigInfo! -GitVersion.GitVersionOptions.Diag -> bool -GitVersion.GitVersionOptions.GitVersionOptions() -> void -GitVersion.GitVersionOptions.Init -> bool -GitVersion.GitVersionOptions.IsHelp -> bool -GitVersion.GitVersionOptions.IsVersion -> bool -GitVersion.GitVersionOptions.LogFilePath -> string? -GitVersion.GitVersionOptions.Output -> System.Collections.Generic.ISet! -GitVersion.GitVersionOptions.OutputFile -> string? -GitVersion.GitVersionOptions.RepositoryInfo.get -> GitVersion.RepositoryInfo! -GitVersion.GitVersionOptions.Settings.get -> GitVersion.Settings! -GitVersion.GitVersionOptions.ShowVariable -> string? -GitVersion.GitVersionOptions.Verbosity -> GitVersion.Logging.Verbosity -GitVersion.GitVersionOptions.WixInfo.get -> GitVersion.WixInfo! -GitVersion.GitVersionOptions.WorkingDirectory.get -> string! -GitVersion.GitVersionOptions.WorkingDirectory.set -> void -GitVersion.GitVersionOutputTool -GitVersion.GitVersionOutputTool.GenerateGitVersionInformation(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.FileWriteInfo! fileWriteInfo) -> void -GitVersion.GitVersionOutputTool.GitVersionOutputTool(Microsoft.Extensions.Options.IOptions! options, GitVersion.VersionConverters.OutputGenerator.IOutputGenerator! outputGenerator, GitVersion.VersionConverters.WixUpdater.IWixVersionFileUpdater! wixVersionFileUpdater, GitVersion.VersionConverters.GitVersionInfo.IGitVersionInfoGenerator! gitVersionInfoGenerator, GitVersion.VersionConverters.AssemblyInfo.IAssemblyInfoFileUpdater! assemblyInfoFileUpdater, GitVersion.VersionConverters.AssemblyInfo.IProjectFileUpdater! projectFileUpdater) -> void -GitVersion.GitVersionOutputTool.OutputVariables(GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber) -> void -GitVersion.GitVersionOutputTool.UpdateAssemblyInfo(GitVersion.OutputVariables.VersionVariables! variables) -> void -GitVersion.GitVersionOutputTool.UpdateWixVersionFile(GitVersion.OutputVariables.VersionVariables! variables) -> void -GitVersion.Helpers.EncodingHelper -GitVersion.Helpers.LambdaEqualityHelper -GitVersion.Helpers.LambdaEqualityHelper.Equals(T? instance, T? other) -> bool -GitVersion.Helpers.LambdaEqualityHelper.GetHashCode(T instance) -> int -GitVersion.Helpers.LambdaEqualityHelper.LambdaEqualityHelper(params System.Func![]! equalityContributorAccessors) -> void -GitVersion.Helpers.LambdaKeyComparer -GitVersion.Helpers.LambdaKeyComparer.LambdaKeyComparer(System.Func! keySelector, System.Collections.Generic.IComparer? innerComparer = null) -> void -GitVersion.Helpers.PathHelper -GitVersion.Helpers.PathHelper.PathHelper() -> void -GitVersion.Helpers.ProcessHelper -GitVersion.Helpers.RetryAction -GitVersion.Helpers.RetryAction.Execute(System.Func! operation) -> Result -GitVersion.Helpers.RetryAction.RetryAction(int maxRetries = 5) -> void -GitVersion.Helpers.RetryAction -GitVersion.Helpers.RetryAction.Execute(System.Action! operation) -> void -GitVersion.Helpers.RetryAction.RetryAction(int maxRetries = 5) -> void -GitVersion.Helpers.ServiceMessageEscapeHelper -GitVersion.Helpers.StringComparerUtils -GitVersion.IBranch -GitVersion.IBranch.Commits.get -> GitVersion.ICommitCollection? -GitVersion.IBranch.IsDetachedHead.get -> bool -GitVersion.IBranch.IsRemote.get -> bool -GitVersion.IBranch.IsTracking.get -> bool -GitVersion.IBranch.Tip.get -> GitVersion.ICommit? -GitVersion.IBranchCollection -GitVersion.IBranchCollection.ExcludeBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! -GitVersion.IBranchCollection.this[string! name].get -> GitVersion.IBranch? -GitVersion.IBranchCollection.UpdateTrackedBranch(GitVersion.IBranch! branch, string! remoteTrackingReferenceName) -> void -GitVersion.ICommit -GitVersion.ICommit.Message.get -> string! -GitVersion.ICommit.Parents.get -> System.Collections.Generic.IEnumerable! -GitVersion.ICommit.When.get -> System.DateTimeOffset -GitVersion.ICommitCollection -GitVersion.ICommitCollection.GetCommitsPriorTo(System.DateTimeOffset olderThan) -> System.Collections.Generic.IEnumerable! -GitVersion.ICommitCollection.QueryBy(GitVersion.CommitFilter! commitFilter) -> System.Collections.Generic.IEnumerable! -GitVersion.IEnvironment -GitVersion.IEnvironment.GetEnvironmentVariable(string! variableName) -> string? -GitVersion.IEnvironment.SetEnvironmentVariable(string! variableName, string? value) -> void -GitVersion.IFileSystem -GitVersion.IFileSystem.Copy(string! from, string! to, bool overwrite) -> void -GitVersion.IFileSystem.CreateDirectory(string! path) -> void -GitVersion.IFileSystem.Delete(string! path) -> void -GitVersion.IFileSystem.DirectoryEnumerateFiles(string? directory, string! searchPattern, System.IO.SearchOption searchOption) -> System.Collections.Generic.IEnumerable! -GitVersion.IFileSystem.DirectoryExists(string! path) -> bool -GitVersion.IFileSystem.Exists(string! file) -> bool -GitVersion.IFileSystem.GetLastDirectoryWrite(string! path) -> long -GitVersion.IFileSystem.Move(string! from, string! to) -> void -GitVersion.IFileSystem.OpenRead(string! path) -> System.IO.Stream! -GitVersion.IFileSystem.OpenWrite(string! path) -> System.IO.Stream! -GitVersion.IFileSystem.PathsEqual(string? path, string? otherPath) -> bool -GitVersion.IFileSystem.ReadAllText(string! path) -> string! -GitVersion.IFileSystem.WriteAllText(string? file, string! fileContents) -> void -GitVersion.IFileSystem.WriteAllText(string? file, string! fileContents, System.Text.Encoding! encoding) -> void -GitVersion.IGitObject -GitVersion.IGitObject.Id.get -> GitVersion.IObjectId! -GitVersion.IGitObject.Sha.get -> string! -GitVersion.IGitPreparer -GitVersion.IGitPreparer.EnsureLocalBranchExistsForCurrentBranch(GitVersion.IRemote! remote, string! currentBranch) -> void -GitVersion.IGitPreparer.Prepare() -> void -GitVersion.IGitRepository -GitVersion.IGitRepository.Branches.get -> GitVersion.IBranchCollection! -GitVersion.IGitRepository.Commits.get -> GitVersion.ICommitCollection! -GitVersion.IGitRepository.FindMergeBase(GitVersion.ICommit! commit, GitVersion.ICommit! otherCommit) -> GitVersion.ICommit? -GitVersion.IGitRepository.GetNumberOfUncommittedChanges() -> int -GitVersion.IGitRepository.Head.get -> GitVersion.IBranch! -GitVersion.IGitRepository.IsHeadDetached.get -> bool -GitVersion.IGitRepository.Path.get -> string! -GitVersion.IGitRepository.Refs.get -> GitVersion.IReferenceCollection! -GitVersion.IGitRepository.Remotes.get -> GitVersion.IRemoteCollection! -GitVersion.IGitRepository.Tags.get -> GitVersion.ITagCollection! -GitVersion.IGitRepository.WorkingDirectory.get -> string! -GitVersion.IGitRepositoryInfo -GitVersion.IGitRepositoryInfo.DotGitDirectory.get -> string? -GitVersion.IGitRepositoryInfo.DynamicGitRepositoryPath.get -> string? -GitVersion.IGitRepositoryInfo.GitRootPath.get -> string? -GitVersion.IGitRepositoryInfo.ProjectRootDirectory.get -> string? -GitVersion.IGitVersionCalculateTool -GitVersion.IGitVersionCalculateTool.CalculateVersionVariables() -> GitVersion.OutputVariables.VersionVariables! -GitVersion.IGitVersionContextFactory -GitVersion.IGitVersionContextFactory.Create(GitVersion.GitVersionOptions! gitVersionOptions) -> GitVersion.GitVersionContext! -GitVersion.IGitVersionModule -GitVersion.IGitVersionModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.IGitVersionOutputTool -GitVersion.IGitVersionOutputTool.GenerateGitVersionInformation(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.FileWriteInfo! fileWriteInfo) -> void -GitVersion.IGitVersionOutputTool.OutputVariables(GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber) -> void -GitVersion.IGitVersionOutputTool.UpdateAssemblyInfo(GitVersion.OutputVariables.VersionVariables! variables) -> void -GitVersion.IGitVersionOutputTool.UpdateWixVersionFile(GitVersion.OutputVariables.VersionVariables! variables) -> void -GitVersion.IMutatingGitRepository -GitVersion.IMutatingGitRepository.Checkout(string! commitOrBranchSpec) -> void -GitVersion.IMutatingGitRepository.Clone(string? sourceUrl, string? workdirPath, GitVersion.AuthenticationInfo! auth) -> void -GitVersion.IMutatingGitRepository.CreateBranchForPullRequestBranch(GitVersion.AuthenticationInfo! auth) -> void -GitVersion.IMutatingGitRepository.Fetch(string! remote, System.Collections.Generic.IEnumerable! refSpecs, GitVersion.AuthenticationInfo! auth, string? logMessage) -> void -GitVersion.INamedReference -GitVersion.INamedReference.Name.get -> GitVersion.ReferenceName! -GitVersion.IncrementStrategy -GitVersion.IncrementStrategy.Inherit = 4 -> GitVersion.IncrementStrategy -GitVersion.IncrementStrategy.Major = 1 -> GitVersion.IncrementStrategy -GitVersion.IncrementStrategy.Minor = 2 -> GitVersion.IncrementStrategy -GitVersion.IncrementStrategy.None = 0 -> GitVersion.IncrementStrategy -GitVersion.IncrementStrategy.Patch = 3 -> GitVersion.IncrementStrategy -GitVersion.IncrementStrategyExtensions -GitVersion.IObjectId -GitVersion.IObjectId.Sha.get -> string! -GitVersion.IObjectId.ToString(int prefixLength) -> string! -GitVersion.IReference -GitVersion.IReference.ReferenceTargetId.get -> GitVersion.IObjectId? -GitVersion.IReference.TargetIdentifier.get -> string! -GitVersion.IReferenceCollection -GitVersion.IReferenceCollection.Add(string! name, string! canonicalRefNameOrObject, bool allowOverwrite = false) -> void -GitVersion.IReferenceCollection.FromGlob(string! prefix) -> System.Collections.Generic.IEnumerable! -GitVersion.IReferenceCollection.Head.get -> GitVersion.IReference? -GitVersion.IReferenceCollection.this[GitVersion.ReferenceName! referenceName].get -> GitVersion.IReference? -GitVersion.IReferenceCollection.this[string! name].get -> GitVersion.IReference? -GitVersion.IReferenceCollection.UpdateTarget(GitVersion.IReference! directRef, GitVersion.IObjectId! targetId) -> void -GitVersion.IRefSpec -GitVersion.IRefSpec.Destination.get -> string! -GitVersion.IRefSpec.Direction.get -> GitVersion.RefSpecDirection -GitVersion.IRefSpec.Source.get -> string! -GitVersion.IRefSpec.Specification.get -> string! -GitVersion.IRefSpecCollection -GitVersion.IRemote -GitVersion.IRemote.FetchRefSpecs.get -> System.Collections.Generic.IEnumerable! -GitVersion.IRemote.Name.get -> string! -GitVersion.IRemote.PushRefSpecs.get -> System.Collections.Generic.IEnumerable! -GitVersion.IRemote.RefSpecs.get -> System.Collections.Generic.IEnumerable! -GitVersion.IRemote.Url.get -> string! -GitVersion.IRemoteCollection -GitVersion.IRemoteCollection.Remove(string! remoteName) -> void -GitVersion.IRemoteCollection.this[string! name].get -> GitVersion.IRemote? -GitVersion.IRemoteCollection.Update(string! remoteName, string! refSpec) -> void -GitVersion.ITag -GitVersion.ITag.PeeledTargetCommit() -> GitVersion.ICommit? -GitVersion.ITag.TargetSha.get -> string? -GitVersion.ITagCollection -GitVersion.LockedFileException -GitVersion.LockedFileException.LockedFileException(System.Exception! inner) -> void -GitVersion.Logging.ConsoleAdapter -GitVersion.Logging.ConsoleAdapter.ConsoleAdapter() -> void -GitVersion.Logging.ConsoleAdapter.ReadLine() -> string? -GitVersion.Logging.ConsoleAdapter.UseColor(System.ConsoleColor consoleColor) -> System.IDisposable! -GitVersion.Logging.ConsoleAdapter.Write(string? msg) -> void -GitVersion.Logging.ConsoleAdapter.WriteLine() -> void -GitVersion.Logging.ConsoleAdapter.WriteLine(string? msg) -> void -GitVersion.Logging.ConsoleAppender -GitVersion.Logging.ConsoleAppender.ConsoleAppender() -> void -GitVersion.Logging.ConsoleAppender.WriteTo(GitVersion.Logging.LogLevel level, string! message) -> void -GitVersion.Logging.Disposable -GitVersion.Logging.FileAppender -GitVersion.Logging.FileAppender.FileAppender(string! filePath) -> void -GitVersion.Logging.FileAppender.WriteTo(GitVersion.Logging.LogLevel level, string! message) -> void -GitVersion.Logging.IConsole -GitVersion.Logging.IConsole.ReadLine() -> string? -GitVersion.Logging.IConsole.UseColor(System.ConsoleColor consoleColor) -> System.IDisposable! -GitVersion.Logging.IConsole.Write(string? msg) -> void -GitVersion.Logging.IConsole.WriteLine() -> void -GitVersion.Logging.IConsole.WriteLine(string? msg) -> void -GitVersion.Logging.ILog -GitVersion.Logging.ILog.AddLogAppender(GitVersion.Logging.ILogAppender! logAppender) -> void -GitVersion.Logging.ILog.IndentLog(string! operationDescription) -> System.IDisposable! -GitVersion.Logging.ILog.Verbosity.get -> GitVersion.Logging.Verbosity -GitVersion.Logging.ILog.Verbosity.set -> void -GitVersion.Logging.ILog.Write(GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogLevel level, string! format, params object![]! args) -> void -GitVersion.Logging.ILogAppender -GitVersion.Logging.ILogAppender.WriteTo(GitVersion.Logging.LogLevel level, string! message) -> void -GitVersion.Logging.Log -GitVersion.Logging.Log.AddLogAppender(GitVersion.Logging.ILogAppender! logAppender) -> void -GitVersion.Logging.Log.IndentLog(string! operationDescription) -> System.IDisposable! -GitVersion.Logging.Log.Log() -> void -GitVersion.Logging.Log.Log(params GitVersion.Logging.ILogAppender![]! appenders) -> void -GitVersion.Logging.Log.Verbosity.get -> GitVersion.Logging.Verbosity -GitVersion.Logging.Log.Verbosity.set -> void -GitVersion.Logging.Log.Write(GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogLevel level, string! format, params object![]! args) -> void -GitVersion.Logging.LogAction -GitVersion.Logging.LogActionEntry -GitVersion.Logging.LogExtensions -GitVersion.Logging.LogLevel -GitVersion.Logging.LogLevel.Debug = 5 -> GitVersion.Logging.LogLevel -GitVersion.Logging.LogLevel.Error = 1 -> GitVersion.Logging.LogLevel -GitVersion.Logging.LogLevel.Fatal = 0 -> GitVersion.Logging.LogLevel -GitVersion.Logging.LogLevel.Info = 3 -> GitVersion.Logging.LogLevel -GitVersion.Logging.LogLevel.Verbose = 4 -> GitVersion.Logging.LogLevel -GitVersion.Logging.LogLevel.Warn = 2 -> GitVersion.Logging.LogLevel -GitVersion.Logging.NullLog -GitVersion.Logging.NullLog.AddLogAppender(GitVersion.Logging.ILogAppender! logAppender) -> void -GitVersion.Logging.NullLog.Indent.get -> string? -GitVersion.Logging.NullLog.Indent.set -> void -GitVersion.Logging.NullLog.IndentLog(string! operationDescription) -> System.IDisposable! -GitVersion.Logging.NullLog.NullLog() -> void -GitVersion.Logging.NullLog.Verbosity.get -> GitVersion.Logging.Verbosity -GitVersion.Logging.NullLog.Verbosity.set -> void -GitVersion.Logging.NullLog.Write(GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogLevel level, string! format, params object![]! args) -> void -GitVersion.Logging.Verbosity -GitVersion.Logging.Verbosity.Diagnostic = 4 -> GitVersion.Logging.Verbosity -GitVersion.Logging.Verbosity.Minimal = 1 -> GitVersion.Logging.Verbosity -GitVersion.Logging.Verbosity.Normal = 2 -> GitVersion.Logging.Verbosity -GitVersion.Logging.Verbosity.Quiet = 0 -> GitVersion.Logging.Verbosity -GitVersion.Logging.Verbosity.Verbose = 3 -> GitVersion.Logging.Verbosity -GitVersion.MergeMessage -GitVersion.MergeMessage.FormatName.get -> string? -GitVersion.MergeMessage.IsMergedPullRequest.get -> bool -GitVersion.MergeMessage.MergedBranch.get -> string! -GitVersion.MergeMessage.MergeMessage(string? mergeMessage, GitVersion.Model.Configuration.Config! config) -> void -GitVersion.MergeMessage.PullRequestNumber.get -> int? -GitVersion.MergeMessage.TargetBranch.get -> string? -GitVersion.MergeMessage.Version.get -> GitVersion.SemanticVersion? -GitVersion.Model.Configuration.BranchConfig -GitVersion.Model.Configuration.BranchConfig.Apply(GitVersion.Model.Configuration.BranchConfig! overrides) -> GitVersion.Model.Configuration.BranchConfig! -GitVersion.Model.Configuration.BranchConfig.BranchConfig() -> void -GitVersion.Model.Configuration.BranchConfig.BranchConfig(GitVersion.Model.Configuration.BranchConfig! branchConfiguration) -> void -GitVersion.Model.Configuration.BranchConfig.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode? -GitVersion.Model.Configuration.BranchConfig.CommitMessageIncrementing.set -> void -GitVersion.Model.Configuration.BranchConfig.Increment.get -> GitVersion.IncrementStrategy? -GitVersion.Model.Configuration.BranchConfig.Increment.set -> void -GitVersion.Model.Configuration.BranchConfig.IsMainline.get -> bool? -GitVersion.Model.Configuration.BranchConfig.IsMainline.set -> void -GitVersion.Model.Configuration.BranchConfig.IsReleaseBranch.get -> bool? -GitVersion.Model.Configuration.BranchConfig.IsReleaseBranch.set -> void -GitVersion.Model.Configuration.BranchConfig.IsSourceBranchFor.get -> System.Collections.Generic.HashSet? -GitVersion.Model.Configuration.BranchConfig.IsSourceBranchFor.set -> void -GitVersion.Model.Configuration.BranchConfig.MergeTo(GitVersion.Model.Configuration.BranchConfig! targetConfig) -> void -GitVersion.Model.Configuration.BranchConfig.Name.get -> string! -GitVersion.Model.Configuration.BranchConfig.Name.set -> void -GitVersion.Model.Configuration.BranchConfig.PreReleaseWeight.get -> int? -GitVersion.Model.Configuration.BranchConfig.PreReleaseWeight.set -> void -GitVersion.Model.Configuration.BranchConfig.PreventIncrementOfMergedBranchVersion.get -> bool? -GitVersion.Model.Configuration.BranchConfig.PreventIncrementOfMergedBranchVersion.set -> void -GitVersion.Model.Configuration.BranchConfig.Regex.get -> string? -GitVersion.Model.Configuration.BranchConfig.Regex.set -> void -GitVersion.Model.Configuration.BranchConfig.SourceBranches.get -> System.Collections.Generic.HashSet? -GitVersion.Model.Configuration.BranchConfig.SourceBranches.set -> void -GitVersion.Model.Configuration.BranchConfig.Tag.get -> string? -GitVersion.Model.Configuration.BranchConfig.Tag.set -> void -GitVersion.Model.Configuration.BranchConfig.TagNumberPattern.get -> string? -GitVersion.Model.Configuration.BranchConfig.TagNumberPattern.set -> void -GitVersion.Model.Configuration.BranchConfig.TrackMergeTarget.get -> bool? -GitVersion.Model.Configuration.BranchConfig.TrackMergeTarget.set -> void -GitVersion.Model.Configuration.BranchConfig.TracksReleaseBranches.get -> bool? -GitVersion.Model.Configuration.BranchConfig.TracksReleaseBranches.set -> void -GitVersion.Model.Configuration.BranchConfig.VersioningMode.get -> GitVersion.VersionCalculation.VersioningMode? -GitVersion.Model.Configuration.BranchConfig.VersioningMode.set -> void -GitVersion.Model.Configuration.Config -GitVersion.Model.Configuration.Config.AssemblyFileVersioningFormat.get -> string? -GitVersion.Model.Configuration.Config.AssemblyFileVersioningFormat.set -> void -GitVersion.Model.Configuration.Config.AssemblyFileVersioningScheme.get -> GitVersion.Extensions.AssemblyFileVersioningScheme? -GitVersion.Model.Configuration.Config.AssemblyFileVersioningScheme.set -> void -GitVersion.Model.Configuration.Config.AssemblyInformationalFormat.get -> string? -GitVersion.Model.Configuration.Config.AssemblyInformationalFormat.set -> void -GitVersion.Model.Configuration.Config.AssemblyVersioningFormat.get -> string? -GitVersion.Model.Configuration.Config.AssemblyVersioningFormat.set -> void -GitVersion.Model.Configuration.Config.AssemblyVersioningScheme.get -> GitVersion.Extensions.AssemblyVersioningScheme? -GitVersion.Model.Configuration.Config.AssemblyVersioningScheme.set -> void -GitVersion.Model.Configuration.Config.Branches.get -> System.Collections.Generic.Dictionary! -GitVersion.Model.Configuration.Config.Branches.set -> void -GitVersion.Model.Configuration.Config.BuildMetaDataPadding.get -> int? -GitVersion.Model.Configuration.Config.BuildMetaDataPadding.set -> void -GitVersion.Model.Configuration.Config.CommitDateFormat.get -> string? -GitVersion.Model.Configuration.Config.CommitDateFormat.set -> void -GitVersion.Model.Configuration.Config.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode? -GitVersion.Model.Configuration.Config.CommitMessageIncrementing.set -> void -GitVersion.Model.Configuration.Config.CommitsSinceVersionSourcePadding.get -> int? -GitVersion.Model.Configuration.Config.CommitsSinceVersionSourcePadding.set -> void -GitVersion.Model.Configuration.Config.Config() -> void -GitVersion.Model.Configuration.Config.ContinuousDeploymentFallbackTag.get -> string? -GitVersion.Model.Configuration.Config.ContinuousDeploymentFallbackTag.set -> void -GitVersion.Model.Configuration.Config.Ignore.get -> GitVersion.Model.Configuration.IgnoreConfig! -GitVersion.Model.Configuration.Config.Ignore.set -> void -GitVersion.Model.Configuration.Config.Increment.get -> GitVersion.IncrementStrategy? -GitVersion.Model.Configuration.Config.Increment.set -> void -GitVersion.Model.Configuration.Config.LegacySemVerPadding.get -> int? -GitVersion.Model.Configuration.Config.LegacySemVerPadding.set -> void -GitVersion.Model.Configuration.Config.MajorVersionBumpMessage.get -> string? -GitVersion.Model.Configuration.Config.MajorVersionBumpMessage.set -> void -GitVersion.Model.Configuration.Config.MergeMessageFormats.get -> System.Collections.Generic.Dictionary! -GitVersion.Model.Configuration.Config.MergeMessageFormats.set -> void -GitVersion.Model.Configuration.Config.MinorVersionBumpMessage.get -> string? -GitVersion.Model.Configuration.Config.MinorVersionBumpMessage.set -> void -GitVersion.Model.Configuration.Config.NextVersion.get -> string? -GitVersion.Model.Configuration.Config.NextVersion.set -> void -GitVersion.Model.Configuration.Config.NoBumpMessage.get -> string? -GitVersion.Model.Configuration.Config.NoBumpMessage.set -> void -GitVersion.Model.Configuration.Config.PatchVersionBumpMessage.get -> string? -GitVersion.Model.Configuration.Config.PatchVersionBumpMessage.set -> void -GitVersion.Model.Configuration.Config.TagPrefix.get -> string? -GitVersion.Model.Configuration.Config.TagPrefix.set -> void -GitVersion.Model.Configuration.Config.TagPreReleaseWeight.get -> int? -GitVersion.Model.Configuration.Config.TagPreReleaseWeight.set -> void -GitVersion.Model.Configuration.Config.UpdateBuildNumber.get -> bool? -GitVersion.Model.Configuration.Config.UpdateBuildNumber.set -> void -GitVersion.Model.Configuration.Config.VersioningMode.get -> GitVersion.VersionCalculation.VersioningMode? -GitVersion.Model.Configuration.Config.VersioningMode.set -> void -GitVersion.Model.Configuration.EffectiveBranchConfiguration -GitVersion.Model.Configuration.EffectiveBranchConfiguration.Branch.get -> GitVersion.IBranch! -GitVersion.Model.Configuration.EffectiveBranchConfiguration.CreateNextVersion(GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.SemanticVersion! incrementedVersion) -> GitVersion.VersionCalculation.NextVersion! -GitVersion.Model.Configuration.EffectiveBranchConfiguration.EffectiveBranchConfiguration(GitVersion.IBranch! branch, GitVersion.Model.Configuration.EffectiveConfiguration! value) -> void -GitVersion.Model.Configuration.EffectiveBranchConfiguration.Value.get -> GitVersion.Model.Configuration.EffectiveConfiguration! -GitVersion.Model.Configuration.EffectiveConfiguration -GitVersion.Model.Configuration.EffectiveConfiguration.AssemblyFileVersioningFormat.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.AssemblyFileVersioningScheme.get -> GitVersion.Extensions.AssemblyFileVersioningScheme -GitVersion.Model.Configuration.EffectiveConfiguration.AssemblyInformationalFormat.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.AssemblyVersioningFormat.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.AssemblyVersioningScheme.get -> GitVersion.Extensions.AssemblyVersioningScheme -GitVersion.Model.Configuration.EffectiveConfiguration.BranchPrefixToTrim.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.BuildMetaDataPadding.get -> int -GitVersion.Model.Configuration.EffectiveConfiguration.CommitDateFormat.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.Model.Configuration.EffectiveConfiguration.CommitsSinceVersionSourcePadding.get -> int -GitVersion.Model.Configuration.EffectiveConfiguration.ContinuousDeploymentFallbackTag.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Extensions.AssemblyVersioningScheme assemblyVersioningScheme, GitVersion.Extensions.AssemblyFileVersioningScheme assemblyFileVersioningScheme, string? assemblyInformationalFormat, string? assemblyVersioningFormat, string? assemblyFileVersioningFormat, GitVersion.VersionCalculation.VersioningMode versioningMode, string? tagPrefix, string? tag, string? nextVersion, GitVersion.IncrementStrategy increment, string? branchPrefixToTrim, bool preventIncrementOfMergedBranchVersion, string? tagNumberPattern, string? continuousDeploymentFallbackTag, bool trackMergeTarget, string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, GitVersion.VersionCalculation.CommitMessageIncrementMode commitMessageIncrementing, int legacySemVerPaddding, int buildMetaDataPadding, int commitsSinceVersionSourcePadding, System.Collections.Generic.IEnumerable! versionFilters, bool tracksReleaseBranches, bool isReleaseBranch, bool isMainline, string? commitDateFormat, bool updateBuildNumber, int preReleaseWeight, int tagPreReleaseWeight) -> void -GitVersion.Model.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Model.Configuration.Config! configuration, GitVersion.Model.Configuration.BranchConfig! currentBranchConfig) -> void -GitVersion.Model.Configuration.EffectiveConfiguration.Increment.get -> GitVersion.IncrementStrategy -GitVersion.Model.Configuration.EffectiveConfiguration.IsMainline.get -> bool -GitVersion.Model.Configuration.EffectiveConfiguration.IsReleaseBranch.get -> bool -GitVersion.Model.Configuration.EffectiveConfiguration.LegacySemVerPadding.get -> int -GitVersion.Model.Configuration.EffectiveConfiguration.MajorVersionBumpMessage.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.MinorVersionBumpMessage.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.NextVersion.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.NoBumpMessage.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.PatchVersionBumpMessage.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.PreReleaseWeight.get -> int -GitVersion.Model.Configuration.EffectiveConfiguration.PreventIncrementOfMergedBranchVersion.get -> bool -GitVersion.Model.Configuration.EffectiveConfiguration.Tag.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.TagNumberPattern.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.TagPrefix.get -> string? -GitVersion.Model.Configuration.EffectiveConfiguration.TagPreReleaseWeight.get -> int -GitVersion.Model.Configuration.EffectiveConfiguration.TrackMergeTarget.get -> bool -GitVersion.Model.Configuration.EffectiveConfiguration.TracksReleaseBranches.get -> bool -GitVersion.Model.Configuration.EffectiveConfiguration.UpdateBuildNumber.get -> bool -GitVersion.Model.Configuration.EffectiveConfiguration.VersionFilters.get -> System.Collections.Generic.IEnumerable! -GitVersion.Model.Configuration.EffectiveConfiguration.VersioningMode.get -> GitVersion.VersionCalculation.VersioningMode -GitVersion.Model.Configuration.IgnoreConfig -GitVersion.Model.Configuration.IgnoreConfig.Before.get -> System.DateTimeOffset? -GitVersion.Model.Configuration.IgnoreConfig.Before.set -> void -GitVersion.Model.Configuration.IgnoreConfig.IgnoreConfig() -> void -GitVersion.Model.Configuration.IgnoreConfig.ShAs.get -> System.Collections.Generic.IEnumerable! -GitVersion.Model.Configuration.IgnoreConfig.ShAs.set -> void -GitVersion.Model.Exceptions.InfiniteLoopProtectionException -GitVersion.Model.Exceptions.InfiniteLoopProtectionException.InfiniteLoopProtectionException(string! messageFormat) -> void -GitVersion.Model.OutputType -GitVersion.Model.OutputType.BuildServer = 0 -> GitVersion.Model.OutputType -GitVersion.Model.OutputType.File = 2 -> GitVersion.Model.OutputType -GitVersion.Model.OutputType.Json = 1 -> GitVersion.Model.OutputType -GitVersion.OutputVariables.VersionVariables -GitVersion.OutputVariables.VersionVariables.AssemblySemFileVer.get -> string? -GitVersion.OutputVariables.VersionVariables.AssemblySemVer.get -> string? -GitVersion.OutputVariables.VersionVariables.BranchName.get -> string? -GitVersion.OutputVariables.VersionVariables.BuildMetaData.get -> string? -GitVersion.OutputVariables.VersionVariables.BuildMetaDataPadded.get -> string? -GitVersion.OutputVariables.VersionVariables.CommitDate.get -> string? -GitVersion.OutputVariables.VersionVariables.CommitDate.set -> void -GitVersion.OutputVariables.VersionVariables.CommitsSinceVersionSource.get -> string? -GitVersion.OutputVariables.VersionVariables.CommitsSinceVersionSourcePadded.get -> string? -GitVersion.OutputVariables.VersionVariables.EscapedBranchName.get -> string? -GitVersion.OutputVariables.VersionVariables.FileName.get -> string? -GitVersion.OutputVariables.VersionVariables.FileName.set -> void -GitVersion.OutputVariables.VersionVariables.FullBuildMetaData.get -> string? -GitVersion.OutputVariables.VersionVariables.FullSemVer.get -> string! -GitVersion.OutputVariables.VersionVariables.GetEnumerator() -> System.Collections.Generic.IEnumerator>! -GitVersion.OutputVariables.VersionVariables.InformationalVersion.get -> string? -GitVersion.OutputVariables.VersionVariables.LegacySemVer.get -> string! -GitVersion.OutputVariables.VersionVariables.LegacySemVerPadded.get -> string! -GitVersion.OutputVariables.VersionVariables.Major.get -> string! -GitVersion.OutputVariables.VersionVariables.MajorMinorPatch.get -> string! -GitVersion.OutputVariables.VersionVariables.Minor.get -> string! -GitVersion.OutputVariables.VersionVariables.NuGetPreReleaseTag.get -> string? -GitVersion.OutputVariables.VersionVariables.NuGetPreReleaseTagV2.get -> string? -GitVersion.OutputVariables.VersionVariables.NuGetVersion.get -> string! -GitVersion.OutputVariables.VersionVariables.NuGetVersionV2.get -> string! -GitVersion.OutputVariables.VersionVariables.Patch.get -> string! -GitVersion.OutputVariables.VersionVariables.PreReleaseLabel.get -> string? -GitVersion.OutputVariables.VersionVariables.PreReleaseLabelWithDash.get -> string? -GitVersion.OutputVariables.VersionVariables.PreReleaseNumber.get -> string? -GitVersion.OutputVariables.VersionVariables.PreReleaseTag.get -> string? -GitVersion.OutputVariables.VersionVariables.PreReleaseTagWithDash.get -> string? -GitVersion.OutputVariables.VersionVariables.SemVer.get -> string! -GitVersion.OutputVariables.VersionVariables.Sha.get -> string? -GitVersion.OutputVariables.VersionVariables.ShortSha.get -> string? -GitVersion.OutputVariables.VersionVariables.this[string! variable].get -> string? -GitVersion.OutputVariables.VersionVariables.TryGetValue(string! variable, out string? variableValue) -> bool -GitVersion.OutputVariables.VersionVariables.UncommittedChanges.get -> string? -GitVersion.OutputVariables.VersionVariables.VersionSourceSha.get -> string? -GitVersion.OutputVariables.VersionVariables.VersionVariables(string! major, string! minor, string! patch, string? buildMetaData, string? buildMetaDataPadded, string? fullBuildMetaData, string? branchName, string? escapedBranchName, string? sha, string? shortSha, string! majorMinorPatch, string! semVer, string! legacySemVer, string! legacySemVerPadded, string! fullSemVer, string? assemblySemVer, string? assemblySemFileVer, string? preReleaseTag, string? preReleaseTagWithDash, string? preReleaseLabel, string? preReleaseLabelWithDash, string? preReleaseNumber, string! weightedPreReleaseNumber, string? informationalVersion, string? commitDate, string! nugetVersion, string! nugetVersionV2, string? nugetPreReleaseTag, string? nugetPreReleaseTagV2, string? versionSourceSha, string? commitsSinceVersionSource, string? commitsSinceVersionSourcePadded, string? uncommittedChanges) -> void -GitVersion.OutputVariables.VersionVariables.WeightedPreReleaseNumber.get -> string! -GitVersion.OutputVariables.VersionVariablesJsonModel -GitVersion.OutputVariables.VersionVariablesJsonModel.AssemblySemFileVer.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.AssemblySemFileVer.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.AssemblySemVer.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.AssemblySemVer.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.BranchName.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.BranchName.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.BuildMetaData.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.BuildMetaData.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.BuildMetaDataPadded.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.BuildMetaDataPadded.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.CommitDate.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.CommitDate.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.CommitsSinceVersionSource.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.CommitsSinceVersionSource.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.CommitsSinceVersionSourcePadded.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.CommitsSinceVersionSourcePadded.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.EscapedBranchName.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.EscapedBranchName.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.FullBuildMetaData.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.FullBuildMetaData.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.FullSemVer.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.FullSemVer.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.InformationalVersion.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.InformationalVersion.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.LegacySemVer.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.LegacySemVer.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.LegacySemVerPadded.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.LegacySemVerPadded.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.Major.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.Major.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.MajorMinorPatch.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.MajorMinorPatch.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.Minor.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.Minor.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetPreReleaseTag.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetPreReleaseTag.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetPreReleaseTagV2.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetPreReleaseTagV2.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetVersion.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetVersion.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetVersionV2.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.NuGetVersionV2.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.Patch.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.Patch.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseLabel.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseLabel.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseLabelWithDash.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseLabelWithDash.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseNumber.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseNumber.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseTag.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseTag.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseTagWithDash.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.PreReleaseTagWithDash.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.SemVer.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.SemVer.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.Sha.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.Sha.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.ShortSha.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.ShortSha.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.UncommittedChanges.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.UncommittedChanges.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.VersionSourceSha.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.VersionSourceSha.set -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.VersionVariablesJsonModel() -> void -GitVersion.OutputVariables.VersionVariablesJsonModel.WeightedPreReleaseNumber.get -> string? -GitVersion.OutputVariables.VersionVariablesJsonModel.WeightedPreReleaseNumber.set -> void -GitVersion.OutputVariables.VersionVariablesJsonNumberConverter -GitVersion.OutputVariables.VersionVariablesJsonNumberConverter.VersionVariablesJsonNumberConverter() -> void -GitVersion.OutputVariables.VersionVariablesJsonStringConverter -GitVersion.OutputVariables.VersionVariablesJsonStringConverter.VersionVariablesJsonStringConverter() -> void -GitVersion.ReferenceName -GitVersion.ReferenceName.Canonical.get -> string! -GitVersion.ReferenceName.CompareTo(GitVersion.ReferenceName! other) -> int -GitVersion.ReferenceName.Equals(GitVersion.ReferenceName? other) -> bool -GitVersion.ReferenceName.EquivalentTo(string? name) -> bool -GitVersion.ReferenceName.Friendly.get -> string! -GitVersion.ReferenceName.IsBranch.get -> bool -GitVersion.ReferenceName.IsPullRequest.get -> bool -GitVersion.ReferenceName.IsRemoteBranch.get -> bool -GitVersion.ReferenceName.IsTag.get -> bool -GitVersion.ReferenceName.ReferenceName(string! canonical) -> void -GitVersion.ReferenceName.WithoutRemote.get -> string! -GitVersion.RefSpecDirection -GitVersion.RefSpecDirection.Fetch = 0 -> GitVersion.RefSpecDirection -GitVersion.RefSpecDirection.Push = 1 -> GitVersion.RefSpecDirection -GitVersion.RepositoryInfo -GitVersion.RepositoryInfo.ClonePath -> string? -GitVersion.RepositoryInfo.CommitId -> string? -GitVersion.RepositoryInfo.RepositoryInfo() -> void -GitVersion.RepositoryInfo.TargetBranch -> string? -GitVersion.RepositoryInfo.TargetUrl -> string? -GitVersion.RepositoryStore -GitVersion.RepositoryStore.ExcludingBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.FindBranch(string? branchName) -> GitVersion.IBranch? -GitVersion.RepositoryStore.FindCommitBranchWasBranchedFrom(GitVersion.IBranch? branch, GitVersion.Model.Configuration.Config! configuration, params GitVersion.IBranch![]! excludedBranches) -> GitVersion.BranchCommit -GitVersion.RepositoryStore.FindMainBranch(GitVersion.Model.Configuration.Config! configuration) -> GitVersion.IBranch? -GitVersion.RepositoryStore.FindMergeBase(GitVersion.IBranch? branch, GitVersion.IBranch? otherBranch) -> GitVersion.ICommit? -GitVersion.RepositoryStore.FindMergeBase(GitVersion.ICommit! commit, GitVersion.ICommit! mainlineTip) -> GitVersion.ICommit? -GitVersion.RepositoryStore.GetBaseVersionSource(GitVersion.ICommit! currentBranchTip) -> GitVersion.ICommit! -GitVersion.RepositoryStore.GetBranchesContainingCommit(GitVersion.ICommit? commit, System.Collections.Generic.IEnumerable? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetBranchesForCommit(GitVersion.ICommit! commit) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetChosenBranch(GitVersion.Model.Configuration.Config! configuration) -> GitVersion.IBranch? -GitVersion.RepositoryStore.GetCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? currentCommit) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetCurrentCommit(GitVersion.IBranch! currentBranch, string? commitId) -> GitVersion.ICommit? -GitVersion.RepositoryStore.GetCurrentCommitTaggedVersion(GitVersion.ICommit? commit, string? tagPrefix, bool handleDetachedBranch) -> GitVersion.SemanticVersion! -GitVersion.RepositoryStore.GetExcludedInheritBranches(GitVersion.Model.Configuration.Config! configuration) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetMainlineBranches(GitVersion.ICommit! commit, GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable>? mainlineBranchConfigs) -> System.Collections.Generic.IDictionary!>! -GitVersion.RepositoryStore.GetMainlineCommitLog(GitVersion.ICommit? baseVersionSource, GitVersion.ICommit? mainlineTip) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetMergeBaseCommits(GitVersion.ICommit? mergeCommit, GitVersion.ICommit? mergedHead, GitVersion.ICommit? findMergeBase) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetNumberOfUncommittedChanges() -> int -GitVersion.RepositoryStore.GetReleaseBranches(System.Collections.Generic.IEnumerable>! releaseBranchConfig) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.GetTargetBranch(string? targetBranchName) -> GitVersion.IBranch! -GitVersion.RepositoryStore.GetValidVersionTags(string? tagPrefixRegex, System.DateTimeOffset? olderThan = null) -> System.Collections.Generic.IEnumerable<(GitVersion.ITag! Tag, GitVersion.SemanticVersion! Semver, GitVersion.ICommit! Commit)>! -GitVersion.RepositoryStore.GetVersionTagsOnBranch(GitVersion.IBranch! branch, string? tagPrefixRegex) -> System.Collections.Generic.IEnumerable! -GitVersion.RepositoryStore.IsCommitOnBranch(GitVersion.ICommit? baseVersionSource, GitVersion.IBranch! branch, GitVersion.ICommit! firstMatchingCommit) -> bool -GitVersion.RepositoryStore.RepositoryStore(GitVersion.Logging.ILog! log, GitVersion.IGitRepository! repository) -> void -GitVersion.SemanticVersion -GitVersion.SemanticVersion.BuildMetaData -> GitVersion.SemanticVersionBuildMetaData? -GitVersion.SemanticVersion.CompareTo(GitVersion.SemanticVersion! value) -> int -GitVersion.SemanticVersion.CompareTo(GitVersion.SemanticVersion? value, bool includePrerelease) -> int -GitVersion.SemanticVersion.Equals(GitVersion.SemanticVersion? obj) -> bool -GitVersion.SemanticVersion.IncrementVersion(GitVersion.VersionField incrementStrategy) -> GitVersion.SemanticVersion! -GitVersion.SemanticVersion.IsEmpty() -> bool -GitVersion.SemanticVersion.Major -> long -GitVersion.SemanticVersion.Minor -> long -GitVersion.SemanticVersion.Patch -> long -GitVersion.SemanticVersion.PreReleaseTag -> GitVersion.SemanticVersionPreReleaseTag? -GitVersion.SemanticVersion.SemanticVersion(GitVersion.SemanticVersion? semanticVersion) -> void -GitVersion.SemanticVersion.SemanticVersion(long major = 0, long minor = 0, long patch = 0) -> void -GitVersion.SemanticVersion.ToString(string! format) -> string! -GitVersion.SemanticVersion.ToString(string? format, System.IFormatProvider? formatProvider) -> string! -GitVersion.SemanticVersionBuildMetaData -GitVersion.SemanticVersionBuildMetaData.Branch -> string? -GitVersion.SemanticVersionBuildMetaData.CommitDate -> System.DateTimeOffset? -GitVersion.SemanticVersionBuildMetaData.CommitsSinceTag -> long? -GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSource -> long? -GitVersion.SemanticVersionBuildMetaData.Equals(GitVersion.SemanticVersionBuildMetaData? other) -> bool -GitVersion.SemanticVersionBuildMetaData.OtherMetaData -> string? -GitVersion.SemanticVersionBuildMetaData.SemanticVersionBuildMetaData() -> void -GitVersion.SemanticVersionBuildMetaData.SemanticVersionBuildMetaData(GitVersion.SemanticVersionBuildMetaData? buildMetaData) -> void -GitVersion.SemanticVersionBuildMetaData.SemanticVersionBuildMetaData(string? versionSourceSha, int? commitsSinceTag, string? branch, string? commitSha, string? commitShortSha, System.DateTimeOffset? commitDate, int numberOfUnCommittedChanges, string? otherMetadata = null) -> void -GitVersion.SemanticVersionBuildMetaData.Sha -> string? -GitVersion.SemanticVersionBuildMetaData.ShortSha -> string? -GitVersion.SemanticVersionBuildMetaData.ToString(string! format) -> string! -GitVersion.SemanticVersionBuildMetaData.ToString(string? format, System.IFormatProvider? formatProvider) -> string! -GitVersion.SemanticVersionBuildMetaData.UncommittedChanges -> long -GitVersion.SemanticVersionBuildMetaData.VersionSourceSha -> string? -GitVersion.SemanticVersionFormatValues -GitVersion.SemanticVersionFormatValues.AssemblyFileSemVer.get -> string? -GitVersion.SemanticVersionFormatValues.AssemblySemVer.get -> string? -GitVersion.SemanticVersionFormatValues.BranchName.get -> string? -GitVersion.SemanticVersionFormatValues.BuildMetaData.get -> string? -GitVersion.SemanticVersionFormatValues.BuildMetaDataPadded.get -> string? -GitVersion.SemanticVersionFormatValues.CommitDate.get -> string? -GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSource.get -> string? -GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSourcePadded.get -> string? -GitVersion.SemanticVersionFormatValues.DefaultInformationalVersion.get -> string! -GitVersion.SemanticVersionFormatValues.EscapedBranchName.get -> string? -GitVersion.SemanticVersionFormatValues.FullBuildMetaData.get -> string? -GitVersion.SemanticVersionFormatValues.FullSemVer.get -> string! -GitVersion.SemanticVersionFormatValues.InformationalVersion.get -> string! -GitVersion.SemanticVersionFormatValues.LegacySemVer.get -> string! -GitVersion.SemanticVersionFormatValues.LegacySemVerPadded.get -> string! -GitVersion.SemanticVersionFormatValues.Major.get -> string! -GitVersion.SemanticVersionFormatValues.MajorMinorPatch.get -> string! -GitVersion.SemanticVersionFormatValues.Minor.get -> string! -GitVersion.SemanticVersionFormatValues.NuGetPreReleaseTag.get -> string? -GitVersion.SemanticVersionFormatValues.NuGetPreReleaseTagV2.get -> string? -GitVersion.SemanticVersionFormatValues.NuGetVersion.get -> string! -GitVersion.SemanticVersionFormatValues.NuGetVersionV2.get -> string! -GitVersion.SemanticVersionFormatValues.Patch.get -> string! -GitVersion.SemanticVersionFormatValues.PreReleaseLabel.get -> string? -GitVersion.SemanticVersionFormatValues.PreReleaseLabelWithDash.get -> string? -GitVersion.SemanticVersionFormatValues.PreReleaseNumber.get -> string? -GitVersion.SemanticVersionFormatValues.PreReleaseTag.get -> string? -GitVersion.SemanticVersionFormatValues.PreReleaseTagWithDash.get -> string? -GitVersion.SemanticVersionFormatValues.SemanticVersionFormatValues(GitVersion.SemanticVersion! semver, GitVersion.Model.Configuration.EffectiveConfiguration! config) -> void -GitVersion.SemanticVersionFormatValues.SemVer.get -> string! -GitVersion.SemanticVersionFormatValues.Sha.get -> string? -GitVersion.SemanticVersionFormatValues.ShortSha.get -> string? -GitVersion.SemanticVersionFormatValues.UncommittedChanges.get -> string? -GitVersion.SemanticVersionFormatValues.VersionSourceSha.get -> string? -GitVersion.SemanticVersionFormatValues.WeightedPreReleaseNumber.get -> string! -GitVersion.SemanticVersionPreReleaseTag -GitVersion.SemanticVersionPreReleaseTag.CompareTo(GitVersion.SemanticVersionPreReleaseTag? other) -> int -GitVersion.SemanticVersionPreReleaseTag.Equals(GitVersion.SemanticVersionPreReleaseTag? other) -> bool -GitVersion.SemanticVersionPreReleaseTag.HasTag() -> bool -GitVersion.SemanticVersionPreReleaseTag.Name.get -> string? -GitVersion.SemanticVersionPreReleaseTag.Name.set -> void -GitVersion.SemanticVersionPreReleaseTag.Number.get -> long? -GitVersion.SemanticVersionPreReleaseTag.Number.set -> void -GitVersion.SemanticVersionPreReleaseTag.PromotedFromCommits.get -> bool? -GitVersion.SemanticVersionPreReleaseTag.PromotedFromCommits.set -> void -GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag() -> void -GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(GitVersion.SemanticVersionPreReleaseTag? preReleaseTag) -> void -GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(string? name, long? number) -> void -GitVersion.SemanticVersionPreReleaseTag.ToString(string! format) -> string! -GitVersion.SemanticVersionPreReleaseTag.ToString(string? format, System.IFormatProvider? formatProvider) -> string! -GitVersion.Settings -GitVersion.Settings.NoCache -> bool -GitVersion.Settings.NoFetch -> bool -GitVersion.Settings.NoNormalize -> bool -GitVersion.Settings.OnlyTrackedBranches -> bool -GitVersion.Settings.Settings() -> void -GitVersion.VersionCalculation.BaseVersion -GitVersion.VersionCalculation.BaseVersion.BaseVersion(string! source, bool shouldIncrement, GitVersion.SemanticVersion! semanticVersion, GitVersion.ICommit? baseVersionSource, string? branchNameOverride) -> void -GitVersion.VersionCalculation.BaseVersion.BaseVersionSource.get -> GitVersion.ICommit? -GitVersion.VersionCalculation.BaseVersion.BranchNameOverride.get -> string? -GitVersion.VersionCalculation.BaseVersion.SemanticVersion.get -> GitVersion.SemanticVersion! -GitVersion.VersionCalculation.BaseVersion.ShouldIncrement.get -> bool -GitVersion.VersionCalculation.BaseVersion.Source.get -> string! -GitVersion.VersionCalculation.BaseVersionCalculator -GitVersion.VersionCalculation.BaseVersionCalculator.BaseVersionCalculator(GitVersion.Logging.ILog! log, GitVersion.Common.IRepositoryStore! repositoryStore, GitVersion.Configuration.IBranchConfigurationCalculator! branchConfigurationCalculator, GitVersion.VersionCalculation.IIncrementStrategyFinder! incrementStrategyFinder, System.Lazy! versionContext, System.Collections.Generic.IEnumerable! strategies) -> void -GitVersion.VersionCalculation.BaseVersionCalculator.GetBaseVersion() -> (GitVersion.VersionCalculation.BaseVersion!, GitVersion.Model.Configuration.EffectiveBranchConfiguration!) -GitVersion.VersionCalculation.Cache.GitVersionCache -GitVersion.VersionCalculation.Cache.GitVersionCache.GetCacheDirectory() -> string! -GitVersion.VersionCalculation.Cache.GitVersionCache.GitVersionCache(GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, GitVersion.IGitRepositoryInfo! repositoryInfo) -> void -GitVersion.VersionCalculation.Cache.GitVersionCache.LoadVersionVariablesFromDiskCache(GitVersion.Cache.GitVersionCacheKey! key) -> GitVersion.OutputVariables.VersionVariables? -GitVersion.VersionCalculation.Cache.GitVersionCache.WriteVariablesToDiskCache(GitVersion.Cache.GitVersionCacheKey! cacheKey, GitVersion.OutputVariables.VersionVariables! variablesFromCache) -> void -GitVersion.VersionCalculation.Cache.GitVersionCacheKeyFactory -GitVersion.VersionCalculation.Cache.GitVersionCacheKeyFactory.Create(GitVersion.Model.Configuration.Config? overrideConfig) -> GitVersion.Cache.GitVersionCacheKey! -GitVersion.VersionCalculation.Cache.GitVersionCacheKeyFactory.GitVersionCacheKeyFactory(GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log, Microsoft.Extensions.Options.IOptions! options, GitVersion.Configuration.IConfigFileLocator! configFileLocator, GitVersion.IGitRepository! gitRepository, GitVersion.IGitRepositoryInfo! repositoryInfo) -> void -GitVersion.VersionCalculation.Cache.IGitVersionCache -GitVersion.VersionCalculation.Cache.IGitVersionCache.GetCacheDirectory() -> string! -GitVersion.VersionCalculation.Cache.IGitVersionCache.LoadVersionVariablesFromDiskCache(GitVersion.Cache.GitVersionCacheKey! key) -> GitVersion.OutputVariables.VersionVariables? -GitVersion.VersionCalculation.Cache.IGitVersionCache.WriteVariablesToDiskCache(GitVersion.Cache.GitVersionCacheKey! cacheKey, GitVersion.OutputVariables.VersionVariables! variablesFromCache) -> void -GitVersion.VersionCalculation.Cache.IGitVersionCacheKeyFactory -GitVersion.VersionCalculation.Cache.IGitVersionCacheKeyFactory.Create(GitVersion.Model.Configuration.Config? overrideConfig) -> GitVersion.Cache.GitVersionCacheKey! -GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.VersionCalculation.CommitMessageIncrementMode.Disabled = 1 -> GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.VersionCalculation.CommitMessageIncrementMode.Enabled = 0 -> GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.VersionCalculation.CommitMessageIncrementMode.MergeMessageOnly = 2 -> GitVersion.VersionCalculation.CommitMessageIncrementMode -GitVersion.VersionCalculation.ConfigNextVersionVersionStrategy -GitVersion.VersionCalculation.ConfigNextVersionVersionStrategy.ConfigNextVersionVersionStrategy(System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.FallbackVersionStrategy -GitVersion.VersionCalculation.FallbackVersionStrategy.FallbackVersionStrategy(GitVersion.Common.IRepositoryStore! repositoryStore, System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.IBaseVersionCalculator -GitVersion.VersionCalculation.IBaseVersionCalculator.GetBaseVersion() -> (GitVersion.VersionCalculation.BaseVersion!, GitVersion.Model.Configuration.EffectiveBranchConfiguration!) -GitVersion.VersionCalculation.IIncrementStrategyFinder -GitVersion.VersionCalculation.IIncrementStrategyFinder.DetermineIncrementedField(GitVersion.GitVersionContext! context, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Model.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField -GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable! commits) -> GitVersion.VersionField? -GitVersion.VersionCalculation.IMainlineVersionCalculator -GitVersion.VersionCalculation.IMainlineVersionCalculator.CreateVersionBuildMetaData(GitVersion.ICommit? baseVersionSource) -> GitVersion.SemanticVersionBuildMetaData! -GitVersion.VersionCalculation.IMainlineVersionCalculator.FindMainlineModeVersion(GitVersion.VersionCalculation.BaseVersion! baseVersion) -> GitVersion.SemanticVersion! -GitVersion.VersionCalculation.IncrementStrategyFinder -GitVersion.VersionCalculation.IncrementStrategyFinder.DetermineIncrementedField(GitVersion.GitVersionContext! context, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Model.Configuration.EffectiveConfiguration! configuration) -> GitVersion.VersionField -GitVersion.VersionCalculation.IncrementStrategyFinder.GetIncrementForCommits(GitVersion.Model.Configuration.Config! configuration, System.Collections.Generic.IEnumerable! commits) -> GitVersion.VersionField? -GitVersion.VersionCalculation.IncrementStrategyFinder.IncrementStrategyFinder(GitVersion.IGitRepository! repository) -> void -GitVersion.VersionCalculation.INextVersionCalculator -GitVersion.VersionCalculation.INextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion! -GitVersion.VersionCalculation.IVariableProvider -GitVersion.VersionCalculation.IVariableProvider.GetVariablesFor(GitVersion.SemanticVersion! semanticVersion, GitVersion.Model.Configuration.EffectiveConfiguration! config, bool isCurrentCommitTagged) -> GitVersion.OutputVariables.VersionVariables! -GitVersion.VersionCalculation.IVersionFilter -GitVersion.VersionCalculation.IVersionFilter.Exclude(GitVersion.VersionCalculation.BaseVersion! version, out string? reason) -> bool -GitVersion.VersionCalculation.IVersionStrategy -GitVersion.VersionCalculation.IVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -GitVersion.VersionCalculation.MergeMessageVersionStrategy -GitVersion.VersionCalculation.MergeMessageVersionStrategy.MergeMessageVersionStrategy(GitVersion.Logging.ILog! log, System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.MinDateVersionFilter -GitVersion.VersionCalculation.MinDateVersionFilter.Exclude(GitVersion.VersionCalculation.BaseVersion! version, out string? reason) -> bool -GitVersion.VersionCalculation.MinDateVersionFilter.MinDateVersionFilter(System.DateTimeOffset minimum) -> void -GitVersion.VersionCalculation.NextVersion -GitVersion.VersionCalculation.NextVersion.BaseVersion.get -> GitVersion.VersionCalculation.BaseVersion! -GitVersion.VersionCalculation.NextVersion.BaseVersion.set -> void -GitVersion.VersionCalculation.NextVersion.Branch.get -> GitVersion.IBranch! -GitVersion.VersionCalculation.NextVersion.Configuration.get -> GitVersion.Model.Configuration.EffectiveConfiguration! -GitVersion.VersionCalculation.NextVersion.IncrementedVersion.get -> GitVersion.SemanticVersion! -GitVersion.VersionCalculation.NextVersion.NextVersion(GitVersion.SemanticVersion! incrementedVersion, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.IBranch! branch, GitVersion.Model.Configuration.EffectiveConfiguration! configuration) -> void -GitVersion.VersionCalculation.NextVersion.NextVersion(GitVersion.SemanticVersion! incrementedVersion, GitVersion.VersionCalculation.BaseVersion! baseVersion, GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> void -GitVersion.VersionCalculation.NextVersionCalculator -GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() -> GitVersion.VersionCalculation.NextVersion! -GitVersion.VersionCalculation.NextVersionCalculator.NextVersionCalculator(GitVersion.Logging.ILog! log, GitVersion.VersionCalculation.IBaseVersionCalculator! baseVersionCalculator, GitVersion.VersionCalculation.IMainlineVersionCalculator! mainlineVersionCalculator, GitVersion.Common.IRepositoryStore! repositoryStore, GitVersion.VersionCalculation.IIncrementStrategyFinder! incrementStrategyFinder, System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.ShaVersionFilter -GitVersion.VersionCalculation.ShaVersionFilter.Exclude(GitVersion.VersionCalculation.BaseVersion! version, out string? reason) -> bool -GitVersion.VersionCalculation.ShaVersionFilter.ShaVersionFilter(System.Collections.Generic.IEnumerable! shas) -> void -GitVersion.VersionCalculation.TaggedCommitVersionStrategy -GitVersion.VersionCalculation.TaggedCommitVersionStrategy.TaggedCommitVersionStrategy(GitVersion.Common.IRepositoryStore! repositoryStore, System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit -GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit.Commit -> GitVersion.ICommit! -GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit.SemVer -> GitVersion.SemanticVersion! -GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit.Tag -> string! -GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit.VersionTaggedCommit(GitVersion.ICommit! commit, GitVersion.SemanticVersion! semVer, string! tag) -> void -GitVersion.VersionCalculation.TrackReleaseBranchesVersionStrategy -GitVersion.VersionCalculation.TrackReleaseBranchesVersionStrategy.TrackReleaseBranchesVersionStrategy(GitVersion.Common.IRepositoryStore! repositoryStore, System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.VariableProvider -GitVersion.VersionCalculation.VariableProvider.GetVariablesFor(GitVersion.SemanticVersion! semanticVersion, GitVersion.Model.Configuration.EffectiveConfiguration! config, bool isCurrentCommitTagged) -> GitVersion.OutputVariables.VersionVariables! -GitVersion.VersionCalculation.VariableProvider.VariableProvider(GitVersion.IEnvironment! environment, GitVersion.Logging.ILog! log) -> void -GitVersion.VersionCalculation.VersionCalculationModule -GitVersion.VersionCalculation.VersionCalculationModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.VersionCalculation.VersionCalculationModule.VersionCalculationModule() -> void -GitVersion.VersionCalculation.VersionInBranchNameVersionStrategy -GitVersion.VersionCalculation.VersionInBranchNameVersionStrategy.VersionInBranchNameVersionStrategy(GitVersion.Common.IRepositoryStore! repositoryStore, System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.VersioningMode -GitVersion.VersionCalculation.VersioningMode.ContinuousDelivery = 0 -> GitVersion.VersionCalculation.VersioningMode -GitVersion.VersionCalculation.VersioningMode.ContinuousDeployment = 1 -> GitVersion.VersionCalculation.VersioningMode -GitVersion.VersionCalculation.VersioningMode.Mainline = 2 -> GitVersion.VersionCalculation.VersioningMode -GitVersion.VersionCalculation.VersionStrategyBase -GitVersion.VersionCalculation.VersionStrategyBase.Context.get -> GitVersion.GitVersionContext! -GitVersion.VersionCalculation.VersionStrategyBase.VersionStrategyBase(System.Lazy! versionContext) -> void -GitVersion.VersionCalculation.VersionStrategyModule -GitVersion.VersionCalculation.VersionStrategyModule.VersionStrategyModule() -> void -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext.AssemblyInfoContext() -> void -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext.AssemblyInfoContext(string! workingDirectory, bool ensureAssemblyInfo, params string![]! assemblyInfoFiles) -> void -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext.AssemblyInfoFiles.get -> string![]! -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext.EnsureAssemblyInfo.get -> bool -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext.WorkingDirectory.get -> string! -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoFileUpdater -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoFileUpdater.AssemblyInfoFileUpdater(GitVersion.Logging.ILog! log, GitVersion.IFileSystem! fileSystem) -> void -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoFileUpdater.Dispose() -> void -GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoFileUpdater.Execute(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext context) -> void -GitVersion.VersionConverters.AssemblyInfo.IAssemblyInfoFileUpdater -GitVersion.VersionConverters.AssemblyInfo.IProjectFileUpdater -GitVersion.VersionConverters.AssemblyInfo.IProjectFileUpdater.CanUpdateProjectFile(System.Xml.Linq.XElement! xmlRoot) -> bool -GitVersion.VersionConverters.AssemblyInfo.ProjectFileUpdater -GitVersion.VersionConverters.AssemblyInfo.ProjectFileUpdater.CanUpdateProjectFile(System.Xml.Linq.XElement! xmlRoot) -> bool -GitVersion.VersionConverters.AssemblyInfo.ProjectFileUpdater.Dispose() -> void -GitVersion.VersionConverters.AssemblyInfo.ProjectFileUpdater.Execute(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.VersionConverters.AssemblyInfo.AssemblyInfoContext context) -> void -GitVersion.VersionConverters.AssemblyInfo.ProjectFileUpdater.ProjectFileUpdater(GitVersion.Logging.ILog! log, GitVersion.IFileSystem! fileSystem) -> void -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext.FileExtension.get -> string! -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext.FileName.get -> string! -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext.GitVersionInfoContext() -> void -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext.GitVersionInfoContext(string! workingDirectory, string! fileName, string! fileExtension) -> void -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext.WorkingDirectory.get -> string! -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoGenerator -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoGenerator.Dispose() -> void -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoGenerator.Execute(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoContext context) -> void -GitVersion.VersionConverters.GitVersionInfo.GitVersionInfoGenerator.GitVersionInfoGenerator(GitVersion.IFileSystem! fileSystem) -> void -GitVersion.VersionConverters.GitVersionInfo.IGitVersionInfoGenerator -GitVersion.VersionConverters.IConverterContext -GitVersion.VersionConverters.IConverterContext.WorkingDirectory.get -> string! -GitVersion.VersionConverters.IVersionConverter -GitVersion.VersionConverters.IVersionConverter.Execute(GitVersion.OutputVariables.VersionVariables! variables, T context) -> void -GitVersion.VersionConverters.OutputGenerator.IOutputGenerator -GitVersion.VersionConverters.OutputGenerator.OutputContext -GitVersion.VersionConverters.OutputGenerator.OutputContext.OutputContext() -> void -GitVersion.VersionConverters.OutputGenerator.OutputContext.OutputContext(string! workingDirectory, string? outputFile, bool? updateBuildNumber) -> void -GitVersion.VersionConverters.OutputGenerator.OutputContext.OutputFile.get -> string? -GitVersion.VersionConverters.OutputGenerator.OutputContext.UpdateBuildNumber.get -> bool? -GitVersion.VersionConverters.OutputGenerator.OutputContext.WorkingDirectory.get -> string! -GitVersion.VersionConverters.OutputGenerator.OutputGenerator -GitVersion.VersionConverters.OutputGenerator.OutputGenerator.Dispose() -> void -GitVersion.VersionConverters.OutputGenerator.OutputGenerator.Execute(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.VersionConverters.OutputGenerator.OutputContext context) -> void -GitVersion.VersionConverters.OutputGenerator.OutputGenerator.OutputGenerator(GitVersion.BuildAgents.ICurrentBuildAgent! buildAgent, GitVersion.Logging.IConsole! console, GitVersion.IFileSystem! fileSystem, Microsoft.Extensions.Options.IOptions! options) -> void -GitVersion.VersionConverters.VersionConvertersModule -GitVersion.VersionConverters.VersionConvertersModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.VersionConverters.VersionConvertersModule.VersionConvertersModule() -> void -GitVersion.VersionConverters.WixUpdater.IWixVersionFileUpdater -GitVersion.VersionConverters.WixUpdater.WixVersionContext -GitVersion.VersionConverters.WixUpdater.WixVersionContext.WixVersionContext() -> void -GitVersion.VersionConverters.WixUpdater.WixVersionContext.WixVersionContext(string! workingDirectory) -> void -GitVersion.VersionConverters.WixUpdater.WixVersionContext.WorkingDirectory.get -> string! -GitVersion.VersionConverters.WixUpdater.WixVersionFileUpdater -GitVersion.VersionConverters.WixUpdater.WixVersionFileUpdater.Dispose() -> void -GitVersion.VersionConverters.WixUpdater.WixVersionFileUpdater.Execute(GitVersion.OutputVariables.VersionVariables! variables, GitVersion.VersionConverters.WixUpdater.WixVersionContext context) -> void -GitVersion.VersionConverters.WixUpdater.WixVersionFileUpdater.WixVersionFileUpdater(GitVersion.IFileSystem! fileSystem, GitVersion.Logging.ILog! log) -> void -GitVersion.VersionField -GitVersion.VersionField.Major = 3 -> GitVersion.VersionField -GitVersion.VersionField.Minor = 2 -> GitVersion.VersionField -GitVersion.VersionField.None = 0 -> GitVersion.VersionField -GitVersion.VersionField.Patch = 1 -> GitVersion.VersionField -GitVersion.WarningException -GitVersion.WarningException.WarningException(string! message) -> void -GitVersion.WixInfo -GitVersion.WixInfo.ShouldUpdate -> bool -GitVersion.WixInfo.WixInfo() -> void -override GitVersion.BranchCommit.Equals(object? obj) -> bool -override GitVersion.BranchCommit.GetHashCode() -> int -override GitVersion.BuildAgents.AppVeyor.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.AppVeyor.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.AppVeyor.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.AppVeyor.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.AppVeyor.PreventFetch() -> bool -override GitVersion.BuildAgents.AzurePipelines.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.AzurePipelines.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.AzurePipelines.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.AzurePipelines.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.AzurePipelines.PreventFetch() -> bool -override GitVersion.BuildAgents.BitBucketPipelines.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.BitBucketPipelines.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.BitBucketPipelines.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string? -override GitVersion.BuildAgents.BitBucketPipelines.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.BitBucketPipelines.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -override GitVersion.BuildAgents.BuildKite.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.BuildKite.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.BuildKite.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.BuildKite.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.BuildKite.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.BuildKite.PreventFetch() -> bool -override GitVersion.BuildAgents.BuildServerModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -override GitVersion.BuildAgents.CodeBuild.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.CodeBuild.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.CodeBuild.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.CodeBuild.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.CodeBuild.PreventFetch() -> bool -override GitVersion.BuildAgents.CodeBuild.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -override GitVersion.BuildAgents.ContinuaCi.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.ContinuaCi.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.ContinuaCi.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.ContinuaCi.PreventFetch() -> bool -override GitVersion.BuildAgents.Drone.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.Drone.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.Drone.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.Drone.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.Drone.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.Drone.PreventFetch() -> bool -override GitVersion.BuildAgents.EnvRun.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.EnvRun.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.EnvRun.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.EnvRun.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.EnvRun.PreventFetch() -> bool -override GitVersion.BuildAgents.GitHubActions.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.GitHubActions.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.GitHubActions.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.GitHubActions.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.GitHubActions.PreventFetch() -> bool -override GitVersion.BuildAgents.GitHubActions.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -override GitVersion.BuildAgents.GitLabCi.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.GitLabCi.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.GitLabCi.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.GitLabCi.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.GitLabCi.PreventFetch() -> bool -override GitVersion.BuildAgents.GitLabCi.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -override GitVersion.BuildAgents.Jenkins.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.Jenkins.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.Jenkins.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.Jenkins.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.Jenkins.PreventFetch() -> bool -override GitVersion.BuildAgents.Jenkins.ShouldCleanUpRemotes() -> bool -override GitVersion.BuildAgents.Jenkins.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -override GitVersion.BuildAgents.LocalBuild.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.LocalBuild.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.LocalBuild.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.LocalBuild.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string? -override GitVersion.BuildAgents.MyGet.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.MyGet.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.MyGet.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.MyGet.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string? -override GitVersion.BuildAgents.MyGet.PreventFetch() -> bool -override GitVersion.BuildAgents.SpaceAutomation.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.SpaceAutomation.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.SpaceAutomation.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.SpaceAutomation.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.TeamCity.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.TeamCity.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.TeamCity.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.TeamCity.GetCurrentBranch(bool usingDynamicRepos) -> string? -override GitVersion.BuildAgents.TeamCity.PreventFetch() -> bool -override GitVersion.BuildAgents.TravisCi.CanApplyToCurrentContext() -> bool -override GitVersion.BuildAgents.TravisCi.EnvironmentVariable.get -> string! -override GitVersion.BuildAgents.TravisCi.GenerateSetParameterMessage(string! name, string! value) -> string![]! -override GitVersion.BuildAgents.TravisCi.GenerateSetVersionMessage(GitVersion.OutputVariables.VersionVariables! variables) -> string! -override GitVersion.BuildAgents.TravisCi.PreventFetch() -> bool -override GitVersion.Configuration.Init.EditConfigStep.DefaultResult.get -> string? -override GitVersion.Configuration.Init.EditConfigStep.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.EditConfigStep.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.GitVersionInitModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -override GitVersion.Configuration.Init.SetConfig.AssemblyVersioningSchemeSetting.DefaultResult.get -> string! -override GitVersion.Configuration.Init.SetConfig.AssemblyVersioningSchemeSetting.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetConfig.AssemblyVersioningSchemeSetting.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.SetConfig.ConfigureBranch.DefaultResult.get -> string! -override GitVersion.Configuration.Init.SetConfig.ConfigureBranch.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetConfig.ConfigureBranch.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.SetConfig.ConfigureBranches.DefaultResult.get -> string! -override GitVersion.Configuration.Init.SetConfig.ConfigureBranches.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetConfig.ConfigureBranches.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.SetConfig.GlobalModeSetting.DefaultResult.get -> string! -override GitVersion.Configuration.Init.SetConfig.GlobalModeSetting.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetConfig.GlobalModeSetting.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode.DefaultResult.get -> string! -override GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetConfig.SetBranchIncrementMode.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.SetConfig.SetBranchTag.DefaultResult.get -> string! -override GitVersion.Configuration.Init.SetConfig.SetBranchTag.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetConfig.SetBranchTag.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.SetNextVersion.DefaultResult.get -> string? -override GitVersion.Configuration.Init.SetNextVersion.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.SetNextVersion.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.Wizard.FinishedSetupStep.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.GitFlowSetupStep.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.GitHubFlowStep.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy1Step.DefaultResult.get -> string? -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy1Step.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy1Step.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy2Step.DefaultResult.get -> string? -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy2Step.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy2Step.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy3Step.DefaultResult.get -> string? -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy3Step.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategy3Step.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategyStep.DefaultResult.get -> string? -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategyStep.GetPrompt(GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> string! -override GitVersion.Configuration.Init.Wizard.PickBranchingStrategyStep.HandleResult(string? result, System.Collections.Generic.Queue! steps, GitVersion.Model.Configuration.Config! config, string! workingDirectory) -> GitVersion.Configuration.Init.StepResult! -override GitVersion.Helpers.LambdaKeyComparer.Compare(TSource? x, TSource? y) -> int -override GitVersion.Logging.Log.ToString() -> string! -override GitVersion.Model.Configuration.Config.ToString() -> string! -override GitVersion.OutputVariables.VersionVariables.ToString() -> string! -override GitVersion.OutputVariables.VersionVariablesJsonNumberConverter.CanConvert(System.Type! typeToConvert) -> bool -override GitVersion.OutputVariables.VersionVariablesJsonNumberConverter.HandleNull.get -> bool -override GitVersion.OutputVariables.VersionVariablesJsonNumberConverter.Read(ref System.Text.Json.Utf8JsonReader reader, System.Type! typeToConvert, System.Text.Json.JsonSerializerOptions! options) -> string! -override GitVersion.OutputVariables.VersionVariablesJsonNumberConverter.Write(System.Text.Json.Utf8JsonWriter! writer, string? value, System.Text.Json.JsonSerializerOptions! options) -> void -override GitVersion.OutputVariables.VersionVariablesJsonStringConverter.CanConvert(System.Type! typeToConvert) -> bool -override GitVersion.OutputVariables.VersionVariablesJsonStringConverter.HandleNull.get -> bool -override GitVersion.OutputVariables.VersionVariablesJsonStringConverter.Read(ref System.Text.Json.Utf8JsonReader reader, System.Type! typeToConvert, System.Text.Json.JsonSerializerOptions! options) -> string! -override GitVersion.OutputVariables.VersionVariablesJsonStringConverter.Write(System.Text.Json.Utf8JsonWriter! writer, string? value, System.Text.Json.JsonSerializerOptions! options) -> void -override GitVersion.ReferenceName.Equals(object! obj) -> bool -override GitVersion.ReferenceName.GetHashCode() -> int -override GitVersion.ReferenceName.ToString() -> string! -override GitVersion.SemanticVersion.Equals(object? obj) -> bool -override GitVersion.SemanticVersion.GetHashCode() -> int -override GitVersion.SemanticVersion.ToString() -> string! -override GitVersion.SemanticVersionBuildMetaData.Equals(object! obj) -> bool -override GitVersion.SemanticVersionBuildMetaData.GetHashCode() -> int -override GitVersion.SemanticVersionBuildMetaData.ToString() -> string! -override GitVersion.SemanticVersionPreReleaseTag.Equals(object? obj) -> bool -override GitVersion.SemanticVersionPreReleaseTag.GetHashCode() -> int -override GitVersion.SemanticVersionPreReleaseTag.ToString() -> string! -override GitVersion.VersionCalculation.BaseVersion.ToString() -> string! -override GitVersion.VersionCalculation.ConfigNextVersionVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -override GitVersion.VersionCalculation.FallbackVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -override GitVersion.VersionCalculation.MergeMessageVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -override GitVersion.VersionCalculation.NextVersion.ToString() -> string! -override GitVersion.VersionCalculation.TaggedCommitVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -override GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit.ToString() -> string! -override GitVersion.VersionCalculation.TrackReleaseBranchesVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -override GitVersion.VersionCalculation.VersionInBranchNameVersionStrategy.GetBaseVersions(GitVersion.Model.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! -override GitVersion.VersionCalculation.VersionStrategyModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -readonly GitVersion.BuildAgents.BuildAgentBase.Log -> GitVersion.Logging.ILog! -readonly GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.Console -> GitVersion.Logging.IConsole! -readonly GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.FileSystem -> GitVersion.IFileSystem! -readonly GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.Log -> GitVersion.Logging.ILog! -readonly GitVersion.Configuration.Init.Wizard.ConfigInitWizardStep.StepFactory -> GitVersion.Configuration.Init.Wizard.IConfigInitStepFactory! -static GitVersion.BranchCommit.operator !=(GitVersion.BranchCommit left, GitVersion.BranchCommit right) -> bool -static GitVersion.BranchCommit.operator ==(GitVersion.BranchCommit left, GitVersion.BranchCommit right) -> bool -static GitVersion.Configuration.ConfigExtensions.GetBranchConfiguration(this GitVersion.Model.Configuration.Config! configuration, GitVersion.IBranch! branch) -> GitVersion.Model.Configuration.BranchConfig! -static GitVersion.Configuration.ConfigExtensions.GetBranchConfiguration(this GitVersion.Model.Configuration.Config! configuration, string! branchName) -> GitVersion.Model.Configuration.BranchConfig! -static GitVersion.Configuration.ConfigExtensions.GetBranchSpecificTag(this GitVersion.Model.Configuration.EffectiveConfiguration! configuration, GitVersion.Logging.ILog! log, string? branchFriendlyName, string? branchNameOverride) -> string! -static GitVersion.Configuration.ConfigExtensions.GetFallbackBranchConfiguration(this GitVersion.Model.Configuration.Config! configuration) -> GitVersion.Model.Configuration.BranchConfig! -static GitVersion.Configuration.ConfigExtensions.GetReleaseBranchConfig(this GitVersion.Model.Configuration.Config! configuration) -> System.Collections.Generic.List>! -static GitVersion.Configuration.ConfigExtensions.GetUnknownBranchConfiguration(this GitVersion.Model.Configuration.Config! configuration) -> GitVersion.Model.Configuration.BranchConfig! -static GitVersion.Configuration.ConfigExtensions.IsReleaseBranch(this GitVersion.Model.Configuration.Config! config, string! branchName) -> bool -static GitVersion.Configuration.ConfigSerializer.Read(System.IO.TextReader! reader) -> GitVersion.Model.Configuration.Config! -static GitVersion.Configuration.ConfigSerializer.Write(GitVersion.Model.Configuration.Config! config, System.IO.TextWriter! writer) -> void -static GitVersion.Configuration.Init.StepResult.ExitWithoutSaving() -> GitVersion.Configuration.Init.StepResult! -static GitVersion.Configuration.Init.StepResult.InvalidResponseSelected() -> GitVersion.Configuration.Init.StepResult! -static GitVersion.Configuration.Init.StepResult.Ok() -> GitVersion.Configuration.Init.StepResult! -static GitVersion.Configuration.Init.StepResult.SaveAndExit() -> GitVersion.Configuration.Init.StepResult! -static GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.GetAssemblyFileVersion(this GitVersion.SemanticVersion! sv, GitVersion.Extensions.AssemblyFileVersioningScheme scheme) -> string? -static GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.GetAssemblyVersion(this GitVersion.SemanticVersion! sv, GitVersion.Extensions.AssemblyVersioningScheme scheme) -> string? -static GitVersion.Extensions.CommonExtensions.NotNull(this T? value, string! name = "") -> T! -static GitVersion.Extensions.CommonExtensions.NotNullOrEmpty(this string? value, string! name = "") -> string! -static GitVersion.Extensions.CommonExtensions.NotNullOrWhitespace(this string? value, string! name = "") -> string! -static GitVersion.Extensions.DictionaryExtensions.GetOrAdd(this System.Collections.Generic.IDictionary! dict, TKey key, System.Func! getValue) -> TValue -static GitVersion.Extensions.EnumerableExtensions.OnlyOrDefault(this System.Collections.Generic.IEnumerable! source) -> T? -static GitVersion.Extensions.GitExtensions.CreateGitLogArgs(int? maxCommits) -> string! -static GitVersion.Extensions.GitExtensions.DumpGraph(string! workingDirectory, System.Action? writer = null, int? maxCommits = null) -> void -static GitVersion.Extensions.ObjectExtensions.Deconstruct(this System.Collections.Generic.KeyValuePair kvp, out TKey key, out TValue value) -> void -static GitVersion.Extensions.ObjectExtensions.GetProperties(this object! obj) -> System.Collections.Generic.IEnumerable>! -static GitVersion.Extensions.ReadEmbeddedResourceExtensions.ReadAsStringFromEmbeddedResource(this string! resourceName) -> string! -static GitVersion.Extensions.ServiceCollectionExtensions.AddModule(this Microsoft.Extensions.DependencyInjection.IServiceCollection! serviceCollection, GitVersion.IGitVersionModule! gitVersionModule) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! -static GitVersion.Extensions.ServiceCollectionExtensions.GetServiceForType(this System.IServiceProvider! serviceProvider) -> TService -static GitVersion.Extensions.StringExtensions.AppendLineFormat(this System.Text.StringBuilder! stringBuilder, string! format, params object![]! args) -> void -static GitVersion.Extensions.StringExtensions.ArgumentRequiresValue(this string! argument, int argumentIndex) -> bool -static GitVersion.Extensions.StringExtensions.IsEquivalentTo(this string! self, string? other) -> bool -static GitVersion.Extensions.StringExtensions.IsFalse(this string? value) -> bool -static GitVersion.Extensions.StringExtensions.IsHelp(this string! singleArgument) -> bool -static GitVersion.Extensions.StringExtensions.IsInit(this string! singleArgument) -> bool -static GitVersion.Extensions.StringExtensions.IsNullOrEmpty(this string? value) -> bool -static GitVersion.Extensions.StringExtensions.IsNullOrWhiteSpace(this string? value) -> bool -static GitVersion.Extensions.StringExtensions.IsEmpty(this string? value) -> bool -static GitVersion.Extensions.StringExtensions.IsSwitch(this string? value, string! switchName) -> bool -static GitVersion.Extensions.StringExtensions.IsSwitchArgument(this string? value) -> bool -static GitVersion.Extensions.StringExtensions.IsTrue(this string? value) -> bool -static GitVersion.Extensions.StringExtensions.IsValidPath(this string? path) -> bool -static GitVersion.Extensions.StringExtensions.RegexReplace(this string! input, string! pattern, string! replace, System.Text.RegularExpressions.RegexOptions options = System.Text.RegularExpressions.RegexOptions.None) -> string! -static GitVersion.GitVersionModule.FindAllDerivedTypes(System.Reflection.Assembly! assembly) -> System.Collections.Generic.IEnumerable! -static GitVersion.Helpers.EncodingHelper.DetectEncoding(string? filename) -> System.Text.Encoding? -static GitVersion.Helpers.EncodingHelper.DetectEncoding(System.Collections.Generic.IList! bytes) -> System.Text.Encoding? -static GitVersion.Helpers.PathHelper.Combine(string? path1) -> string! -static GitVersion.Helpers.PathHelper.Combine(string? path1, string? path2) -> string! -static GitVersion.Helpers.PathHelper.Combine(string? path1, string? path2, string? path3) -> string! -static GitVersion.Helpers.PathHelper.Combine(string? path1, string? path2, string? path3, string? path4) -> string! -static GitVersion.Helpers.PathHelper.GetFullPath(string? path) -> string! -static GitVersion.Helpers.ProcessHelper.Run(System.Action! output, System.Action! errorOutput, System.IO.TextReader? input, string! exe, string! args, string! workingDirectory, params System.Collections.Generic.KeyValuePair[]! environmentalVariables) -> int -static GitVersion.Helpers.ServiceMessageEscapeHelper.EscapeValue(string? value) -> string? -static GitVersion.IncrementStrategyExtensions.ToVersionField(this GitVersion.IncrementStrategy strategy) -> GitVersion.VersionField -static GitVersion.Logging.Disposable.Create(System.Action! disposer) -> System.IDisposable! -static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.DiagnosticVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! -static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.GetVerbosityForLevel(GitVersion.Logging.LogLevel level) -> GitVersion.Logging.Verbosity -static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.MinimalVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! -static GitVersion.Logging.LogExtensions.NormalVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! -static GitVersion.Logging.LogExtensions.QuietVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! -static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.VerboseVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! -static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void -static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void -static GitVersion.Logging.LogExtensions.Write(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogLevel level, string! format, params object![]! args) -> void -static GitVersion.Model.Configuration.BranchConfig.CreateDefaultBranchConfig(string! name) -> GitVersion.Model.Configuration.BranchConfig! -static GitVersion.OutputVariables.VersionVariables.AvailableVariables.get -> System.Collections.Generic.IEnumerable! -static GitVersion.OutputVariables.VersionVariables.FromFile(string! filePath, GitVersion.IFileSystem! fileSystem) -> GitVersion.OutputVariables.VersionVariables! -static GitVersion.OutputVariables.VersionVariables.FromJson(string! json) -> GitVersion.OutputVariables.VersionVariables! -static GitVersion.ReferenceName.FromBranchName(string! branchName) -> GitVersion.ReferenceName! -static GitVersion.ReferenceName.Parse(string! canonicalName) -> GitVersion.ReferenceName! -static GitVersion.SemanticVersion.operator !=(GitVersion.SemanticVersion? v1, GitVersion.SemanticVersion? v2) -> bool -static GitVersion.SemanticVersion.operator <(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool -static GitVersion.SemanticVersion.operator <=(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool -static GitVersion.SemanticVersion.operator ==(GitVersion.SemanticVersion? v1, GitVersion.SemanticVersion? v2) -> bool -static GitVersion.SemanticVersion.operator >(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool -static GitVersion.SemanticVersion.operator >=(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool -static GitVersion.SemanticVersion.Parse(string! version, string? tagPrefixRegex) -> GitVersion.SemanticVersion! -static GitVersion.SemanticVersion.TryParse(string! version, string? tagPrefixRegex, out GitVersion.SemanticVersion? semanticVersion) -> bool -static GitVersion.SemanticVersionBuildMetaData.implicit operator GitVersion.SemanticVersionBuildMetaData!(string! preReleaseTag) -> GitVersion.SemanticVersionBuildMetaData! -static GitVersion.SemanticVersionBuildMetaData.implicit operator string?(GitVersion.SemanticVersionBuildMetaData? preReleaseTag) -> string? -static GitVersion.SemanticVersionBuildMetaData.operator !=(GitVersion.SemanticVersionBuildMetaData? left, GitVersion.SemanticVersionBuildMetaData? right) -> bool -static GitVersion.SemanticVersionBuildMetaData.operator ==(GitVersion.SemanticVersionBuildMetaData? left, GitVersion.SemanticVersionBuildMetaData? right) -> bool -static GitVersion.SemanticVersionBuildMetaData.Parse(string? buildMetaData) -> GitVersion.SemanticVersionBuildMetaData! -static GitVersion.SemanticVersionPreReleaseTag.implicit operator GitVersion.SemanticVersionPreReleaseTag!(string? preReleaseTag) -> GitVersion.SemanticVersionPreReleaseTag! -static GitVersion.SemanticVersionPreReleaseTag.implicit operator string?(GitVersion.SemanticVersionPreReleaseTag? preReleaseTag) -> string? -static GitVersion.SemanticVersionPreReleaseTag.operator !=(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool -static GitVersion.SemanticVersionPreReleaseTag.operator <(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool -static GitVersion.SemanticVersionPreReleaseTag.operator <=(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool -static GitVersion.SemanticVersionPreReleaseTag.operator ==(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool -static GitVersion.SemanticVersionPreReleaseTag.operator >(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool -static GitVersion.SemanticVersionPreReleaseTag.operator >=(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool -static GitVersion.SemanticVersionPreReleaseTag.Parse(string? preReleaseTag) -> GitVersion.SemanticVersionPreReleaseTag! -static readonly GitVersion.BranchCommit.Empty -> GitVersion.BranchCommit -static readonly GitVersion.Helpers.StringComparerUtils.IgnoreCaseComparer -> System.StringComparer! -static readonly GitVersion.Helpers.StringComparerUtils.OsDependentComparer -> System.StringComparer! -static readonly GitVersion.Helpers.StringComparerUtils.OsDependentComparison -> System.StringComparison -static readonly GitVersion.Logging.Disposable.Empty -> System.IDisposable! -System.Runtime.CompilerServices.CallerArgumentExpressionAttribute -System.Runtime.CompilerServices.CallerArgumentExpressionAttribute.CallerArgumentExpressionAttribute(string! parameterName) -> void -System.Runtime.CompilerServices.CallerArgumentExpressionAttribute.ParameterName.get -> string! -virtual GitVersion.BuildAgents.BuildAgentBase.CanApplyToCurrentContext() -> bool -virtual GitVersion.BuildAgents.BuildAgentBase.GetCurrentBranch(bool usingDynamicRepos) -> string? -virtual GitVersion.BuildAgents.BuildAgentBase.PreventFetch() -> bool -virtual GitVersion.BuildAgents.BuildAgentBase.ShouldCleanUpRemotes() -> bool -virtual GitVersion.BuildAgents.BuildAgentBase.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.VersionVariables! variables, bool updateBuildNumber = true) -> void -virtual GitVersion.Model.Configuration.IgnoreConfig.IsEmpty.get -> bool -virtual GitVersion.Model.Configuration.IgnoreConfig.ToFilters() -> System.Collections.Generic.IEnumerable! -virtual GitVersion.VersionCalculation.TaggedCommitVersionStrategy.FormatSource(GitVersion.VersionCalculation.TaggedCommitVersionStrategy.VersionTaggedCommit! version) -> string! diff --git a/src/GitVersion.Core/PublicAPI.Unshipped.txt b/src/GitVersion.Core/PublicAPI.Unshipped.txt index e69de29bb2..b20f471231 100644 --- a/src/GitVersion.Core/PublicAPI.Unshipped.txt +++ b/src/GitVersion.Core/PublicAPI.Unshipped.txt @@ -0,0 +1,837 @@ +#nullable enable +const GitVersion.Git.ReferenceName.LocalBranchPrefix = "refs/heads/" -> string! +const GitVersion.Git.ReferenceName.RemoteTrackingBranchPrefix = "refs/remotes/" -> string! +GitVersion.Agents.IBuildAgent +GitVersion.Agents.IBuildAgent.CanApplyToCurrentContext() -> bool +GitVersion.Agents.IBuildAgent.GetCurrentBranch(bool usingDynamicRepos) -> string? +GitVersion.Agents.IBuildAgent.IsDefault.get -> bool +GitVersion.Agents.IBuildAgent.PreventFetch() -> bool +GitVersion.Agents.IBuildAgent.ShouldCleanUpRemotes() -> bool +GitVersion.Agents.IBuildAgent.WriteIntegration(System.Action! writer, GitVersion.OutputVariables.GitVersionVariables! variables, bool updateBuildNumber = true) -> void +GitVersion.Agents.ICurrentBuildAgent +GitVersion.AssemblySettingsInfo +GitVersion.AssemblySettingsInfo.AssemblySettingsInfo() -> void +GitVersion.AssemblySettingsInfo.EnsureAssemblyInfo -> bool +GitVersion.AssemblySettingsInfo.Files -> System.Collections.Generic.ISet! +GitVersion.AssemblySettingsInfo.UpdateAssemblyInfo -> bool +GitVersion.AssemblySettingsInfo.UpdateProjectFiles -> bool +GitVersion.BugException +GitVersion.BugException.BugException() -> void +GitVersion.BugException.BugException(string! message) -> void +GitVersion.BugException.BugException(string? message, System.Exception? innerException) -> void +GitVersion.Common.IRepositoryStore +GitVersion.Common.IRepositoryStore.ExcludingBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.FindBranch(GitVersion.Git.ReferenceName! branchName) -> GitVersion.Git.IBranch? +GitVersion.Common.IRepositoryStore.FindBranch(string! branchName) -> GitVersion.Git.IBranch? +GitVersion.Common.IRepositoryStore.FindCommitBranchBranchedFrom(GitVersion.Git.IBranch? branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.Git.IBranch![]! excludedBranches) -> GitVersion.Git.BranchCommit +GitVersion.Common.IRepositoryStore.FindCommitBranchesBranchedFrom(GitVersion.Git.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.Git.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.FindCommitBranchesBranchedFrom(GitVersion.Git.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.Git.IBranch? branch, GitVersion.Git.IBranch? otherBranch) -> GitVersion.Git.ICommit? +GitVersion.Common.IRepositoryStore.FindMergeBase(GitVersion.Git.ICommit! commit, GitVersion.Git.ICommit! mainlineTip) -> GitVersion.Git.ICommit? +GitVersion.Common.IRepositoryStore.GetBranchesContainingCommit(GitVersion.Git.ICommit! commit, System.Collections.Generic.IEnumerable? branches = null, bool onlyTrackedBranches = false) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.GetCommitLog(GitVersion.Git.ICommit? baseVersionSource, GitVersion.Git.ICommit! currentCommit, GitVersion.Configuration.IIgnoreConfiguration! ignore) -> System.Collections.Generic.IReadOnlyList! +GitVersion.Common.IRepositoryStore.GetCurrentCommit(GitVersion.Git.IBranch! currentBranch, string? commitId, GitVersion.Configuration.IIgnoreConfiguration! ignore) -> GitVersion.Git.ICommit? +GitVersion.Common.IRepositoryStore.GetNumberOfUncommittedChanges() -> int +GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.Git.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, params GitVersion.Git.IBranch![]! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.GetSourceBranches(GitVersion.Git.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration, System.Collections.Generic.IEnumerable! excludedBranches) -> System.Collections.Generic.IEnumerable! +GitVersion.Common.IRepositoryStore.GetTargetBranch(string? targetBranchName) -> GitVersion.Git.IBranch! +GitVersion.Common.IRepositoryStore.IsCommitOnBranch(GitVersion.Git.ICommit? baseVersionSource, GitVersion.Git.IBranch! branch, GitVersion.Git.ICommit! firstMatchingCommit) -> bool +GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.AssemblyFileVersioningScheme.Major = 3 -> GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.AssemblyFileVersioningScheme.MajorMinor = 2 -> GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.AssemblyFileVersioningScheme.MajorMinorPatch = 1 -> GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.AssemblyFileVersioningScheme.MajorMinorPatchTag = 0 -> GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.AssemblyFileVersioningScheme.None = 4 -> GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.AssemblyVersioningScheme.Major = 3 -> GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.AssemblyVersioningScheme.MajorMinor = 2 -> GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.AssemblyVersioningScheme.MajorMinorPatch = 1 -> GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.AssemblyVersioningScheme.MajorMinorPatchTag = 0 -> GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.AssemblyVersioningScheme.None = 4 -> GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.EffectiveBranchConfiguration +GitVersion.Configuration.EffectiveBranchConfiguration.Branch.get -> GitVersion.Git.IBranch! +GitVersion.Configuration.EffectiveBranchConfiguration.EffectiveBranchConfiguration(GitVersion.Configuration.EffectiveConfiguration! Value, GitVersion.Git.IBranch! Branch) -> void +GitVersion.Configuration.EffectiveBranchConfiguration.Value.get -> GitVersion.Configuration.EffectiveConfiguration! +GitVersion.Configuration.EffectiveConfiguration +GitVersion.Configuration.EffectiveConfiguration.AssemblyFileVersioningFormat.get -> string? +GitVersion.Configuration.EffectiveConfiguration.AssemblyFileVersioningScheme.get -> GitVersion.Configuration.AssemblyFileVersioningScheme +GitVersion.Configuration.EffectiveConfiguration.AssemblyInformationalFormat.get -> string? +GitVersion.Configuration.EffectiveConfiguration.AssemblyVersioningFormat.get -> string? +GitVersion.Configuration.EffectiveConfiguration.AssemblyVersioningScheme.get -> GitVersion.Configuration.AssemblyVersioningScheme +GitVersion.Configuration.EffectiveConfiguration.DeploymentMode.get -> GitVersion.VersionCalculation.DeploymentMode +GitVersion.Configuration.EffectiveConfiguration.EffectiveConfiguration(GitVersion.Configuration.IGitVersionConfiguration! configuration, GitVersion.Configuration.IBranchConfiguration! branchConfiguration, GitVersion.Configuration.EffectiveConfiguration? fallbackConfiguration = null) -> void +GitVersion.Configuration.EffectiveConfiguration.Ignore.get -> GitVersion.Configuration.IIgnoreConfiguration! +GitVersion.Configuration.EffectiveConfiguration.PreventIncrementOfMergedBranch.get -> bool +GitVersion.Configuration.EffectiveConfiguration.PreventIncrementWhenBranchMerged.get -> bool +GitVersion.Configuration.EffectiveConfiguration.PreventIncrementWhenCurrentCommitTagged.get -> bool +GitVersion.Configuration.EffectiveConfiguration.RegularExpression.get -> string? +GitVersion.Configuration.EffectiveConfiguration.CommitDateFormat.get -> string? +GitVersion.Configuration.EffectiveConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode +GitVersion.Configuration.EffectiveConfiguration.Increment.get -> GitVersion.IncrementStrategy +GitVersion.Configuration.EffectiveConfiguration.IsMainBranch.get -> bool +GitVersion.Configuration.EffectiveConfiguration.IsReleaseBranch.get -> bool +GitVersion.Configuration.EffectiveConfiguration.Label.get -> string? +GitVersion.Configuration.EffectiveConfiguration.LabelNumberPattern.get -> string? +GitVersion.Configuration.EffectiveConfiguration.TagPreReleaseWeight.get -> int +GitVersion.Configuration.EffectiveConfiguration.TagPrefix.get -> string? +GitVersion.Configuration.EffectiveConfiguration.MajorVersionBumpMessage.get -> string? +GitVersion.Configuration.EffectiveConfiguration.MinorVersionBumpMessage.get -> string? +GitVersion.Configuration.EffectiveConfiguration.NextVersion.get -> string? +GitVersion.Configuration.EffectiveConfiguration.NoBumpMessage.get -> string? +GitVersion.Configuration.EffectiveConfiguration.PatchVersionBumpMessage.get -> string? +GitVersion.Configuration.EffectiveConfiguration.PreReleaseWeight.get -> int +GitVersion.Configuration.EffectiveConfiguration.SemanticVersionFormat.get -> GitVersion.SemanticVersionFormat +GitVersion.Configuration.EffectiveConfiguration.TrackMergeMessage.get -> bool +GitVersion.Configuration.EffectiveConfiguration.TrackMergeTarget.get -> bool +GitVersion.Configuration.EffectiveConfiguration.TracksReleaseBranches.get -> bool +GitVersion.Configuration.EffectiveConfiguration.UpdateBuildNumber.get -> bool +GitVersion.Configuration.EffectiveConfiguration.VersionFilters.get -> System.Collections.Generic.IEnumerable! +GitVersion.Configuration.EffectiveConfiguration.VersionInBranchRegex.get -> System.Text.RegularExpressions.Regex! +GitVersion.Configuration.EffectiveConfiguration.VersionStrategy.get -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.Configuration.IBranchConfiguration +GitVersion.Configuration.IBranchConfiguration.CommitMessageIncrementing.get -> GitVersion.VersionCalculation.CommitMessageIncrementMode? +GitVersion.Configuration.IBranchConfiguration.DeploymentMode.get -> GitVersion.VersionCalculation.DeploymentMode? +GitVersion.Configuration.IBranchConfiguration.Increment.get -> GitVersion.IncrementStrategy +GitVersion.Configuration.IBranchConfiguration.Inherit(GitVersion.Configuration.EffectiveConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! +GitVersion.Configuration.IBranchConfiguration.Inherit(GitVersion.Configuration.IBranchConfiguration! configuration) -> GitVersion.Configuration.IBranchConfiguration! +GitVersion.Configuration.IBranchConfiguration.IsMainBranch.get -> bool? +GitVersion.Configuration.IBranchConfiguration.IsMatch(string! branchName) -> bool +GitVersion.Configuration.IBranchConfiguration.IsReleaseBranch.get -> bool? +GitVersion.Configuration.IBranchConfiguration.IsSourceBranchFor.get -> System.Collections.Generic.IReadOnlyCollection! +GitVersion.Configuration.IBranchConfiguration.Label.get -> string? +GitVersion.Configuration.IBranchConfiguration.LabelNumberPattern.get -> string? +GitVersion.Configuration.IBranchConfiguration.PreReleaseWeight.get -> int? +GitVersion.Configuration.IBranchConfiguration.PreventIncrement.get -> GitVersion.Configuration.IPreventIncrementConfiguration! +GitVersion.Configuration.IBranchConfiguration.RegularExpression.get -> string? +GitVersion.Configuration.IBranchConfiguration.SourceBranches.get -> System.Collections.Generic.IReadOnlyCollection! +GitVersion.Configuration.IBranchConfiguration.TrackMergeMessage.get -> bool? +GitVersion.Configuration.IBranchConfiguration.TrackMergeTarget.get -> bool? +GitVersion.Configuration.IBranchConfiguration.TracksReleaseBranches.get -> bool? +GitVersion.Configuration.IConfigurationFileLocator +GitVersion.Configuration.IConfigurationFileLocator.GetConfigurationFile(string? directory) -> string? +GitVersion.Configuration.IConfigurationFileLocator.Verify(string? workingDirectory, string? projectRootDirectory) -> void +GitVersion.Configuration.IConfigurationProvider +GitVersion.Configuration.IConfigurationProvider.Provide(System.Collections.Generic.IReadOnlyDictionary? overrideConfiguration = null) -> GitVersion.Configuration.IGitVersionConfiguration! +GitVersion.Configuration.IGitVersionConfiguration +GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyFileVersioningScheme.get -> GitVersion.Configuration.AssemblyFileVersioningScheme? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyInformationalFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.AssemblyVersioningScheme.get -> GitVersion.Configuration.AssemblyVersioningScheme? +GitVersion.Configuration.IGitVersionConfiguration.Branches.get -> System.Collections.Generic.IReadOnlyDictionary! +GitVersion.Configuration.IGitVersionConfiguration.CommitDateFormat.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.GetEmptyBranchConfiguration() -> GitVersion.Configuration.IBranchConfiguration! +GitVersion.Configuration.IGitVersionConfiguration.Ignore.get -> GitVersion.Configuration.IIgnoreConfiguration! +GitVersion.Configuration.IGitVersionConfiguration.TagPreReleaseWeight.get -> int? +GitVersion.Configuration.IGitVersionConfiguration.TagPrefix.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.MajorVersionBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.MergeMessageFormats.get -> System.Collections.Generic.IReadOnlyDictionary! +GitVersion.Configuration.IGitVersionConfiguration.MinorVersionBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.NextVersion.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.NoBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.PatchVersionBumpMessage.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.SemanticVersionFormat.get -> GitVersion.SemanticVersionFormat +GitVersion.Configuration.IGitVersionConfiguration.UpdateBuildNumber.get -> bool +GitVersion.Configuration.IGitVersionConfiguration.VersionInBranchPattern.get -> string? +GitVersion.Configuration.IGitVersionConfiguration.VersionInBranchRegex.get -> System.Text.RegularExpressions.Regex! +GitVersion.Configuration.IGitVersionConfiguration.VersionStrategy.get -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.Configuration.IGitVersionConfiguration.Workflow.get -> string? +GitVersion.Configuration.IIgnoreConfiguration +GitVersion.Configuration.IIgnoreConfiguration.Before.get -> System.DateTimeOffset? +GitVersion.Configuration.IIgnoreConfiguration.IsEmpty.get -> bool +GitVersion.Configuration.IIgnoreConfiguration.Shas.get -> System.Collections.Generic.IReadOnlySet! +GitVersion.Configuration.IPreventIncrementConfiguration +GitVersion.Configuration.IPreventIncrementConfiguration.OfMergedBranch.get -> bool? +GitVersion.Configuration.IPreventIncrementConfiguration.WhenBranchMerged.get -> bool? +GitVersion.Configuration.IPreventIncrementConfiguration.WhenCurrentCommitTagged.get -> bool? +GitVersion.Configuration.ReferenceNameExtensions +GitVersion.ConfigurationInfo +GitVersion.ConfigurationInfo.ConfigurationFile -> string? +GitVersion.ConfigurationInfo.OverrideConfiguration -> System.Collections.Generic.IReadOnlyDictionary? +GitVersion.ConfigurationInfo.ShowConfiguration -> bool +GitVersion.Extensions.AssemblyVersionsGeneratorExtensions +GitVersion.Extensions.CommonExtensions +GitVersion.Extensions.DictionaryExtensions +GitVersion.Extensions.EnumerableExtensions +GitVersion.Extensions.GitExtensions +GitVersion.Extensions.IncrementStrategyExtensions +GitVersion.Extensions.ReadEmbeddedResourceExtensions +GitVersion.Extensions.ServiceCollectionExtensions +GitVersion.Extensions.StringExtensions +GitVersion.FileWriteInfo +GitVersion.FileWriteInfo.FileExtension.get -> string! +GitVersion.FileWriteInfo.FileExtension.init -> void +GitVersion.FileWriteInfo.FileName.get -> string! +GitVersion.FileWriteInfo.FileName.init -> void +GitVersion.FileWriteInfo.FileWriteInfo(string! WorkingDirectory, string! FileName, string! FileExtension) -> void +GitVersion.FileWriteInfo.WorkingDirectory.get -> string! +GitVersion.FileWriteInfo.WorkingDirectory.init -> void +GitVersion.Git.AuthenticationInfo +GitVersion.Git.AuthenticationInfo.Password.get -> string? +GitVersion.Git.AuthenticationInfo.Password.set -> void +GitVersion.Git.AuthenticationInfo.Token.get -> string? +GitVersion.Git.AuthenticationInfo.Token.set -> void +GitVersion.Git.AuthenticationInfo.Username.get -> string? +GitVersion.Git.AuthenticationInfo.Username.set -> void +GitVersion.Git.BranchCommit +GitVersion.Git.BranchCommit.Branch.get -> GitVersion.Git.IBranch! +GitVersion.Git.BranchCommit.BranchCommit() -> void +GitVersion.Git.BranchCommit.BranchCommit(GitVersion.Git.ICommit! commit, GitVersion.Git.IBranch! branch) -> void +GitVersion.Git.BranchCommit.Commit.get -> GitVersion.Git.ICommit! +GitVersion.Git.BranchCommit.Equals(GitVersion.Git.BranchCommit? other) -> bool +GitVersion.Git.CommitExtensions +GitVersion.Git.CommitFilter +GitVersion.Git.CommitFilter.ExcludeReachableFrom.get -> object? +GitVersion.Git.CommitFilter.ExcludeReachableFrom.init -> void +GitVersion.Git.CommitFilter.FirstParentOnly.get -> bool +GitVersion.Git.CommitFilter.FirstParentOnly.init -> void +GitVersion.Git.CommitFilter.IncludeReachableFrom.get -> object? +GitVersion.Git.CommitFilter.IncludeReachableFrom.init -> void +GitVersion.Git.CommitFilter.SortBy.get -> GitVersion.Git.CommitSortStrategies +GitVersion.Git.CommitFilter.SortBy.init -> void +GitVersion.Git.CommitSortStrategies +GitVersion.Git.CommitSortStrategies.None = 0 -> GitVersion.Git.CommitSortStrategies +GitVersion.Git.CommitSortStrategies.Reverse = 4 -> GitVersion.Git.CommitSortStrategies +GitVersion.Git.CommitSortStrategies.Time = 2 -> GitVersion.Git.CommitSortStrategies +GitVersion.Git.CommitSortStrategies.Topological = 1 -> GitVersion.Git.CommitSortStrategies +GitVersion.Git.IBranch +GitVersion.Git.IBranch.Commits.get -> GitVersion.Git.ICommitCollection! +GitVersion.Git.IBranch.IsDetachedHead.get -> bool +GitVersion.Git.IBranch.IsRemote.get -> bool +GitVersion.Git.IBranch.IsTracking.get -> bool +GitVersion.Git.IBranch.Tip.get -> GitVersion.Git.ICommit? +GitVersion.Git.IBranchCollection +GitVersion.Git.IBranchCollection.ExcludeBranches(System.Collections.Generic.IEnumerable! branchesToExclude) -> System.Collections.Generic.IEnumerable! +GitVersion.Git.IBranchCollection.this[string! name].get -> GitVersion.Git.IBranch? +GitVersion.Git.IBranchCollection.UpdateTrackedBranch(GitVersion.Git.IBranch! branch, string! remoteTrackingReferenceName) -> void +GitVersion.Git.ICommit +GitVersion.Git.ICommit.Message.get -> string! +GitVersion.Git.ICommit.Parents.get -> System.Collections.Generic.IReadOnlyList! +GitVersion.Git.ICommit.When.get -> System.DateTimeOffset +GitVersion.Git.ICommitCollection +GitVersion.Git.ICommitCollection.GetCommitsPriorTo(System.DateTimeOffset olderThan) -> System.Collections.Generic.IEnumerable! +GitVersion.Git.ICommitCollection.QueryBy(GitVersion.Git.CommitFilter! commitFilter) -> System.Collections.Generic.IEnumerable! +GitVersion.Git.IGitObject +GitVersion.Git.IGitObject.Id.get -> GitVersion.Git.IObjectId! +GitVersion.Git.IGitObject.Sha.get -> string! +GitVersion.Git.IGitRepository +GitVersion.Git.IGitRepository.Branches.get -> GitVersion.Git.IBranchCollection! +GitVersion.Git.IGitRepository.Commits.get -> GitVersion.Git.ICommitCollection! +GitVersion.Git.IGitRepository.DiscoverRepository(string? gitDirectory) -> void +GitVersion.Git.IGitRepository.FindMergeBase(GitVersion.Git.ICommit! commit, GitVersion.Git.ICommit! otherCommit) -> GitVersion.Git.ICommit? +GitVersion.Git.IGitRepository.GetNumberOfUncommittedChanges() -> int +GitVersion.Git.IGitRepository.Head.get -> GitVersion.Git.IBranch! +GitVersion.Git.IGitRepository.IsHeadDetached.get -> bool +GitVersion.Git.IGitRepository.IsShallow.get -> bool +GitVersion.Git.IGitRepository.Path.get -> string! +GitVersion.Git.IGitRepository.Refs.get -> GitVersion.Git.IReferenceCollection! +GitVersion.Git.IGitRepository.Remotes.get -> GitVersion.Git.IRemoteCollection! +GitVersion.Git.IGitRepository.Tags.get -> GitVersion.Git.ITagCollection! +GitVersion.Git.IGitRepository.WorkingDirectory.get -> string! +GitVersion.Git.IGitRepositoryInfo +GitVersion.Git.IGitRepositoryInfo.DotGitDirectory.get -> string? +GitVersion.Git.IGitRepositoryInfo.DynamicGitRepositoryPath.get -> string? +GitVersion.Git.IGitRepositoryInfo.GitRootPath.get -> string? +GitVersion.Git.IGitRepositoryInfo.ProjectRootDirectory.get -> string? +GitVersion.Git.IMutatingGitRepository +GitVersion.Git.IMutatingGitRepository.Checkout(string! commitOrBranchSpec) -> void +GitVersion.Git.IMutatingGitRepository.Clone(string? sourceUrl, string? workdirPath, GitVersion.Git.AuthenticationInfo! auth) -> void +GitVersion.Git.IMutatingGitRepository.CreateBranchForPullRequestBranch(GitVersion.Git.AuthenticationInfo! auth) -> void +GitVersion.Git.IMutatingGitRepository.Fetch(string! remote, System.Collections.Generic.IEnumerable! refSpecs, GitVersion.Git.AuthenticationInfo! auth, string? logMessage) -> void +GitVersion.Git.INamedReference +GitVersion.Git.INamedReference.Name.get -> GitVersion.Git.ReferenceName! +GitVersion.Git.IObjectId +GitVersion.Git.IObjectId.Sha.get -> string! +GitVersion.Git.IObjectId.ToString(int prefixLength) -> string! +GitVersion.Git.IReference +GitVersion.Git.IReference.ReferenceTargetId.get -> GitVersion.Git.IObjectId? +GitVersion.Git.IReference.TargetIdentifier.get -> string! +GitVersion.Git.IReferenceCollection +GitVersion.Git.IReferenceCollection.Add(string! name, string! canonicalRefNameOrObject, bool allowOverwrite = false) -> void +GitVersion.Git.IReferenceCollection.FromGlob(string! prefix) -> System.Collections.Generic.IEnumerable! +GitVersion.Git.IReferenceCollection.Head.get -> GitVersion.Git.IReference? +GitVersion.Git.IReferenceCollection.this[GitVersion.Git.ReferenceName! referenceName].get -> GitVersion.Git.IReference? +GitVersion.Git.IReferenceCollection.this[string! name].get -> GitVersion.Git.IReference? +GitVersion.Git.IReferenceCollection.UpdateTarget(GitVersion.Git.IReference! directRef, GitVersion.Git.IObjectId! targetId) -> void +GitVersion.Git.IRefSpec +GitVersion.Git.IRefSpec.Destination.get -> string! +GitVersion.Git.IRefSpec.Direction.get -> GitVersion.Git.RefSpecDirection +GitVersion.Git.IRefSpec.Source.get -> string! +GitVersion.Git.IRefSpec.Specification.get -> string! +GitVersion.Git.IRefSpecCollection +GitVersion.Git.IRemote +GitVersion.Git.IRemote.FetchRefSpecs.get -> System.Collections.Generic.IEnumerable! +GitVersion.Git.IRemote.Name.get -> string! +GitVersion.Git.IRemote.PushRefSpecs.get -> System.Collections.Generic.IEnumerable! +GitVersion.Git.IRemote.RefSpecs.get -> System.Collections.Generic.IEnumerable! +GitVersion.Git.IRemote.Url.get -> string! +GitVersion.Git.IRemoteCollection +GitVersion.Git.IRemoteCollection.Remove(string! remoteName) -> void +GitVersion.Git.IRemoteCollection.this[string! name].get -> GitVersion.Git.IRemote? +GitVersion.Git.IRemoteCollection.Update(string! remoteName, string! refSpec) -> void +GitVersion.Git.ITag +GitVersion.Git.ITag.Commit.get -> GitVersion.Git.ICommit! +GitVersion.Git.ITag.TargetSha.get -> string! +GitVersion.Git.ITagCollection +GitVersion.Git.ReferenceName +GitVersion.Git.ReferenceName.Canonical.get -> string! +GitVersion.Git.ReferenceName.CompareTo(GitVersion.Git.ReferenceName? other) -> int +GitVersion.Git.ReferenceName.Equals(GitVersion.Git.ReferenceName? other) -> bool +GitVersion.Git.ReferenceName.EquivalentTo(string? name) -> bool +GitVersion.Git.ReferenceName.Friendly.get -> string! +GitVersion.Git.ReferenceName.IsLocalBranch.get -> bool +GitVersion.Git.ReferenceName.IsPullRequest.get -> bool +GitVersion.Git.ReferenceName.IsRemoteBranch.get -> bool +GitVersion.Git.ReferenceName.IsTag.get -> bool +GitVersion.Git.ReferenceName.ReferenceName(string! canonical) -> void +GitVersion.Git.ReferenceName.TryGetSemanticVersion(out (GitVersion.SemanticVersion! Value, string? Name) result, System.Text.RegularExpressions.Regex! versionPatternRegex, string? tagPrefix, GitVersion.SemanticVersionFormat format) -> bool +GitVersion.Git.ReferenceName.WithoutOrigin.get -> string! +GitVersion.Git.RefSpecDirection +GitVersion.Git.RefSpecDirection.Fetch = 0 -> GitVersion.Git.RefSpecDirection +GitVersion.Git.RefSpecDirection.Push = 1 -> GitVersion.Git.RefSpecDirection +GitVersion.GitVersionCommonModule +GitVersion.GitVersionCommonModule.GitVersionCommonModule() -> void +GitVersion.GitVersionCommonModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void +GitVersion.GitVersionContext +GitVersion.GitVersionContext.Configuration.get -> GitVersion.Configuration.IGitVersionConfiguration! +GitVersion.GitVersionContext.CurrentBranch.get -> GitVersion.Git.IBranch! +GitVersion.GitVersionContext.CurrentBranchCommits.get -> System.Collections.Generic.IEnumerable! +GitVersion.GitVersionContext.CurrentCommit.get -> GitVersion.Git.ICommit! +GitVersion.GitVersionContext.GitVersionContext(GitVersion.Git.IBranch! currentBranch, GitVersion.Git.ICommit! currentCommit, GitVersion.Configuration.IGitVersionConfiguration! configuration, bool isCurrentCommitTagged, int numberOfUncommittedChanges) -> void +GitVersion.GitVersionContext.IsCurrentCommitTagged.get -> bool +GitVersion.GitVersionContext.NumberOfUncommittedChanges.get -> int +GitVersion.GitVersionCoreModule +GitVersion.GitVersionCoreModule.GitVersionCoreModule() -> void +GitVersion.GitVersionCoreModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void +GitVersion.GitVersionException +GitVersion.GitVersionException.GitVersionException() -> void +GitVersion.GitVersionException.GitVersionException(string! message) -> void +GitVersion.GitVersionException.GitVersionException(string! message, System.Exception! innerException) -> void +GitVersion.GitVersionException.GitVersionException(string! messageFormat, params object![]! args) -> void +GitVersion.GitVersionOptions +GitVersion.GitVersionOptions.AssemblySettingsInfo.get -> GitVersion.AssemblySettingsInfo! +GitVersion.GitVersionOptions.AuthenticationInfo.get -> GitVersion.Git.AuthenticationInfo! +GitVersion.GitVersionOptions.ConfigurationInfo.get -> GitVersion.ConfigurationInfo! +GitVersion.GitVersionOptions.Diag -> bool +GitVersion.GitVersionOptions.Format -> string? +GitVersion.GitVersionOptions.GitVersionOptions() -> void +GitVersion.GitVersionOptions.IsHelp -> bool +GitVersion.GitVersionOptions.IsVersion -> bool +GitVersion.GitVersionOptions.LogFilePath -> string? +GitVersion.GitVersionOptions.Output -> System.Collections.Generic.ISet! +GitVersion.GitVersionOptions.OutputFile -> string? +GitVersion.GitVersionOptions.RepositoryInfo.get -> GitVersion.RepositoryInfo! +GitVersion.GitVersionOptions.Settings.get -> GitVersion.Settings! +GitVersion.GitVersionOptions.ShowVariable -> string? +GitVersion.GitVersionOptions.Verbosity -> GitVersion.Logging.Verbosity +GitVersion.GitVersionOptions.WixInfo.get -> GitVersion.WixInfo! +GitVersion.GitVersionOptions.WorkingDirectory.get -> string! +GitVersion.GitVersionOptions.WorkingDirectory.set -> void +GitVersion.Helpers.Disposable +GitVersion.Helpers.EncodingHelper +GitVersion.Helpers.IDisposable +GitVersion.Helpers.IDisposable.Value.get -> T +GitVersion.Helpers.LambdaEqualityHelper +GitVersion.Helpers.LambdaEqualityHelper.Equals(T? instance, T? other) -> bool +GitVersion.Helpers.LambdaEqualityHelper.GetHashCode(T instance) -> int +GitVersion.Helpers.LambdaEqualityHelper.LambdaEqualityHelper(params System.Func![]! equalityContributorAccessors) -> void +GitVersion.Helpers.LambdaKeyComparer +GitVersion.Helpers.LambdaKeyComparer.LambdaKeyComparer(System.Func! keySelector, System.Collections.Generic.IComparer? innerComparer = null) -> void +GitVersion.Helpers.RetryAction +GitVersion.Helpers.RetryAction.Execute(System.Func! operation) -> Result +GitVersion.Helpers.RetryAction.RetryAction(int maxRetries = 5) -> void +GitVersion.Helpers.RetryAction +GitVersion.Helpers.RetryAction.Execute(System.Action! operation) -> void +GitVersion.Helpers.RetryAction.RetryAction(int maxRetries = 5) -> void +GitVersion.Helpers.ServiceMessageEscapeHelper +GitVersion.IConverterContext +GitVersion.IConverterContext.WorkingDirectory.get -> string! +GitVersion.IEnvironment +GitVersion.IEnvironment.GetEnvironmentVariable(string! variableName) -> string? +GitVersion.IEnvironment.SetEnvironmentVariable(string! variableName, string? value) -> void +GitVersion.IFileSystem +GitVersion.IFileSystem.Copy(string! from, string! to, bool overwrite) -> void +GitVersion.IFileSystem.CreateDirectory(string! path) -> void +GitVersion.IFileSystem.Delete(string! path) -> void +GitVersion.IFileSystem.DirectoryEnumerateFiles(string? directory, string! searchPattern, System.IO.SearchOption searchOption) -> System.Collections.Generic.IEnumerable! +GitVersion.IFileSystem.DirectoryExists(string! path) -> bool +GitVersion.IFileSystem.Exists(string! file) -> bool +GitVersion.IFileSystem.GetLastDirectoryWrite(string! path) -> long +GitVersion.IFileSystem.Move(string! from, string! to) -> void +GitVersion.IFileSystem.OpenRead(string! path) -> System.IO.Stream! +GitVersion.IFileSystem.OpenWrite(string! path) -> System.IO.Stream! +GitVersion.IFileSystem.ReadAllText(string! path) -> string! +GitVersion.IFileSystem.WriteAllText(string? file, string! fileContents) -> void +GitVersion.IFileSystem.WriteAllText(string? file, string! fileContents, System.Text.Encoding! encoding) -> void +GitVersion.IGitPreparer +GitVersion.IGitPreparer.EnsureLocalBranchExistsForCurrentBranch(GitVersion.Git.IRemote! remote, string! currentBranch) -> void +GitVersion.IGitPreparer.Prepare() -> void +GitVersion.IGitVersionCalculateTool +GitVersion.IGitVersionCalculateTool.CalculateVersionVariables() -> GitVersion.OutputVariables.GitVersionVariables! +GitVersion.IGitVersionContextFactory +GitVersion.IGitVersionContextFactory.Create(GitVersion.GitVersionOptions! gitVersionOptions) -> GitVersion.GitVersionContext! +GitVersion.IGitVersionModule +GitVersion.IGitVersionModule.FindAllDerivedTypes(System.Reflection.Assembly? assembly) -> System.Collections.Generic.IEnumerable! +GitVersion.IGitVersionModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void +GitVersion.IVersionConverter +GitVersion.IVersionConverter.Execute(GitVersion.OutputVariables.GitVersionVariables! variables, T context) -> void +GitVersion.IncrementStrategy +GitVersion.IncrementStrategy.Inherit = 4 -> GitVersion.IncrementStrategy +GitVersion.IncrementStrategy.Major = 1 -> GitVersion.IncrementStrategy +GitVersion.IncrementStrategy.Minor = 2 -> GitVersion.IncrementStrategy +GitVersion.IncrementStrategy.None = 0 -> GitVersion.IncrementStrategy +GitVersion.IncrementStrategy.Patch = 3 -> GitVersion.IncrementStrategy +GitVersion.LockedFileException +GitVersion.LockedFileException.LockedFileException() -> void +GitVersion.LockedFileException.LockedFileException(System.Exception! inner) -> void +GitVersion.LockedFileException.LockedFileException(string? message) -> void +GitVersion.LockedFileException.LockedFileException(string? message, System.Exception? innerException) -> void +GitVersion.Logging.IConsole +GitVersion.Logging.IConsole.ReadLine() -> string? +GitVersion.Logging.IConsole.UseColor(System.ConsoleColor consoleColor) -> System.IDisposable! +GitVersion.Logging.IConsole.Write(string? msg) -> void +GitVersion.Logging.IConsole.WriteLine() -> void +GitVersion.Logging.IConsole.WriteLine(string? msg) -> void +GitVersion.Logging.ILog +GitVersion.Logging.ILog.AddLogAppender(GitVersion.Logging.ILogAppender! logAppender) -> void +GitVersion.Logging.ILog.IndentLog(string! operationDescription) -> System.IDisposable! +GitVersion.Logging.ILog.Separator() -> void +GitVersion.Logging.ILog.Verbosity.get -> GitVersion.Logging.Verbosity +GitVersion.Logging.ILog.Verbosity.set -> void +GitVersion.Logging.ILog.Write(GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogLevel level, string! format, params object![]! args) -> void +GitVersion.Logging.ILogAppender +GitVersion.Logging.ILogAppender.WriteTo(GitVersion.Logging.LogLevel level, string! message) -> void +GitVersion.Logging.LogAction +GitVersion.Logging.LogActionEntry +GitVersion.Logging.LogExtensions +GitVersion.Logging.LogLevel +GitVersion.Logging.LogLevel.Debug = 5 -> GitVersion.Logging.LogLevel +GitVersion.Logging.LogLevel.Error = 1 -> GitVersion.Logging.LogLevel +GitVersion.Logging.LogLevel.Fatal = 0 -> GitVersion.Logging.LogLevel +GitVersion.Logging.LogLevel.Info = 3 -> GitVersion.Logging.LogLevel +GitVersion.Logging.LogLevel.Verbose = 4 -> GitVersion.Logging.LogLevel +GitVersion.Logging.LogLevel.Warn = 2 -> GitVersion.Logging.LogLevel +GitVersion.Logging.Verbosity +GitVersion.Logging.Verbosity.Diagnostic = 4 -> GitVersion.Logging.Verbosity +GitVersion.Logging.Verbosity.Minimal = 1 -> GitVersion.Logging.Verbosity +GitVersion.Logging.Verbosity.Normal = 2 -> GitVersion.Logging.Verbosity +GitVersion.Logging.Verbosity.Quiet = 0 -> GitVersion.Logging.Verbosity +GitVersion.Logging.Verbosity.Verbose = 3 -> GitVersion.Logging.Verbosity +GitVersion.MergeMessage +GitVersion.MergeMessage.FormatName.get -> string? +GitVersion.MergeMessage.IsMergedPullRequest.get -> bool +GitVersion.MergeMessage.MergedBranch.get -> GitVersion.Git.ReferenceName? +GitVersion.MergeMessage.MergeMessage(string! mergeMessage, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> void +GitVersion.MergeMessage.PullRequestNumber.get -> int? +GitVersion.MergeMessage.TargetBranch.get -> string? +GitVersion.MergeMessage.Version.get -> GitVersion.SemanticVersion? +GitVersion.OutputType +GitVersion.OutputType.BuildServer = 0 -> GitVersion.OutputType +GitVersion.OutputType.File = 2 -> GitVersion.OutputType +GitVersion.OutputType.Json = 1 -> GitVersion.OutputType +GitVersion.OutputVariables.GitVersionVariables +GitVersion.OutputVariables.GitVersionVariables.AssemblySemFileVer.get -> string? +GitVersion.OutputVariables.GitVersionVariables.AssemblySemFileVer.init -> void +GitVersion.OutputVariables.GitVersionVariables.AssemblySemVer.get -> string? +GitVersion.OutputVariables.GitVersionVariables.AssemblySemVer.init -> void +GitVersion.OutputVariables.GitVersionVariables.BranchName.get -> string? +GitVersion.OutputVariables.GitVersionVariables.BranchName.init -> void +GitVersion.OutputVariables.GitVersionVariables.BuildMetaData.get -> string? +GitVersion.OutputVariables.GitVersionVariables.BuildMetaData.init -> void +GitVersion.OutputVariables.GitVersionVariables.CommitDate.get -> string? +GitVersion.OutputVariables.GitVersionVariables.CommitDate.init -> void +GitVersion.OutputVariables.GitVersionVariables.CommitsSinceVersionSource.get -> string? +GitVersion.OutputVariables.GitVersionVariables.CommitsSinceVersionSource.init -> void +GitVersion.OutputVariables.GitVersionVariables.EscapedBranchName.get -> string? +GitVersion.OutputVariables.GitVersionVariables.EscapedBranchName.init -> void +GitVersion.OutputVariables.GitVersionVariables.FullBuildMetaData.get -> string? +GitVersion.OutputVariables.GitVersionVariables.FullBuildMetaData.init -> void +GitVersion.OutputVariables.GitVersionVariables.FullSemVer.get -> string! +GitVersion.OutputVariables.GitVersionVariables.FullSemVer.init -> void +GitVersion.OutputVariables.GitVersionVariables.GetEnumerator() -> System.Collections.Generic.IEnumerator>! +GitVersion.OutputVariables.GitVersionVariables.GitVersionVariables(string! Major, string! Minor, string! Patch, string? BuildMetaData, string? FullBuildMetaData, string? BranchName, string? EscapedBranchName, string? Sha, string? ShortSha, string! MajorMinorPatch, string! SemVer, string! FullSemVer, string? AssemblySemVer, string? AssemblySemFileVer, string? PreReleaseTag, string? PreReleaseTagWithDash, string? PreReleaseLabel, string? PreReleaseLabelWithDash, string? PreReleaseNumber, string! WeightedPreReleaseNumber, string? InformationalVersion, string? CommitDate, string? VersionSourceSha, string? CommitsSinceVersionSource, string? UncommittedChanges) -> void +GitVersion.OutputVariables.GitVersionVariables.InformationalVersion.get -> string? +GitVersion.OutputVariables.GitVersionVariables.InformationalVersion.init -> void +GitVersion.OutputVariables.GitVersionVariables.Major.get -> string! +GitVersion.OutputVariables.GitVersionVariables.Major.init -> void +GitVersion.OutputVariables.GitVersionVariables.MajorMinorPatch.get -> string! +GitVersion.OutputVariables.GitVersionVariables.MajorMinorPatch.init -> void +GitVersion.OutputVariables.GitVersionVariables.Minor.get -> string! +GitVersion.OutputVariables.GitVersionVariables.Minor.init -> void +GitVersion.OutputVariables.GitVersionVariables.Patch.get -> string! +GitVersion.OutputVariables.GitVersionVariables.Patch.init -> void +GitVersion.OutputVariables.GitVersionVariables.PreReleaseLabel.get -> string? +GitVersion.OutputVariables.GitVersionVariables.PreReleaseLabel.init -> void +GitVersion.OutputVariables.GitVersionVariables.PreReleaseLabelWithDash.get -> string? +GitVersion.OutputVariables.GitVersionVariables.PreReleaseLabelWithDash.init -> void +GitVersion.OutputVariables.GitVersionVariables.PreReleaseNumber.get -> string? +GitVersion.OutputVariables.GitVersionVariables.PreReleaseNumber.init -> void +GitVersion.OutputVariables.GitVersionVariables.PreReleaseTag.get -> string? +GitVersion.OutputVariables.GitVersionVariables.PreReleaseTag.init -> void +GitVersion.OutputVariables.GitVersionVariables.PreReleaseTagWithDash.get -> string? +GitVersion.OutputVariables.GitVersionVariables.PreReleaseTagWithDash.init -> void +GitVersion.OutputVariables.GitVersionVariables.SemVer.get -> string! +GitVersion.OutputVariables.GitVersionVariables.SemVer.init -> void +GitVersion.OutputVariables.GitVersionVariables.Sha.get -> string? +GitVersion.OutputVariables.GitVersionVariables.Sha.init -> void +GitVersion.OutputVariables.GitVersionVariables.ShortSha.get -> string? +GitVersion.OutputVariables.GitVersionVariables.ShortSha.init -> void +GitVersion.OutputVariables.GitVersionVariables.TryGetValue(string! variable, out string? variableValue) -> bool +GitVersion.OutputVariables.GitVersionVariables.UncommittedChanges.get -> string? +GitVersion.OutputVariables.GitVersionVariables.UncommittedChanges.init -> void +GitVersion.OutputVariables.GitVersionVariables.VersionSourceSha.get -> string? +GitVersion.OutputVariables.GitVersionVariables.VersionSourceSha.init -> void +GitVersion.OutputVariables.GitVersionVariables.WeightedPreReleaseNumber.get -> string! +GitVersion.OutputVariables.GitVersionVariables.WeightedPreReleaseNumber.init -> void +GitVersion.OutputVariables.IVersionVariableSerializer +GitVersion.OutputVariables.IVersionVariableSerializer.FromFile(string! filePath) -> GitVersion.OutputVariables.GitVersionVariables! +GitVersion.OutputVariables.IVersionVariableSerializer.FromJson(string! json) -> GitVersion.OutputVariables.GitVersionVariables! +GitVersion.OutputVariables.IVersionVariableSerializer.ToFile(GitVersion.OutputVariables.GitVersionVariables! gitVersionVariables, string! filePath) -> void +GitVersion.OutputVariables.IVersionVariableSerializer.ToJson(GitVersion.OutputVariables.GitVersionVariables! gitVersionVariables) -> string! +GitVersion.RepositoryInfo +GitVersion.RepositoryInfo.ClonePath -> string? +GitVersion.RepositoryInfo.CommitId -> string? +GitVersion.RepositoryInfo.TargetBranch -> string? +GitVersion.RepositoryInfo.TargetUrl -> string? +GitVersion.SemanticVersion +GitVersion.SemanticVersion.BuildMetaData.get -> GitVersion.SemanticVersionBuildMetaData! +GitVersion.SemanticVersion.BuildMetaData.init -> void +GitVersion.SemanticVersion.CompareTo(GitVersion.SemanticVersion? value) -> int +GitVersion.SemanticVersion.CompareTo(GitVersion.SemanticVersion? value, bool includePreRelease) -> int +GitVersion.SemanticVersion.Equals(GitVersion.SemanticVersion? obj) -> bool +GitVersion.SemanticVersion.Increment(GitVersion.VersionField increment, string? label, bool forceIncrement, params GitVersion.SemanticVersion?[]! alternativeSemanticVersions) -> GitVersion.SemanticVersion! +GitVersion.SemanticVersion.Increment(GitVersion.VersionField increment, string? label, GitVersion.SemanticVersion.IncrementMode mode, params GitVersion.SemanticVersion?[]! alternativeSemanticVersions) -> GitVersion.SemanticVersion! +GitVersion.SemanticVersion.Increment(GitVersion.VersionField increment, string? label, params GitVersion.SemanticVersion?[]! alternativeSemanticVersions) -> GitVersion.SemanticVersion! +GitVersion.SemanticVersion.IncrementMode +GitVersion.SemanticVersion.IncrementMode.EnsureIntegrity = 2 -> GitVersion.SemanticVersion.IncrementMode +GitVersion.SemanticVersion.IncrementMode.Force = 1 -> GitVersion.SemanticVersion.IncrementMode +GitVersion.SemanticVersion.IncrementMode.Standard = 0 -> GitVersion.SemanticVersion.IncrementMode +GitVersion.SemanticVersion.IsEmpty() -> bool +GitVersion.SemanticVersion.IsEqualTo(GitVersion.SemanticVersion? value, bool includePreRelease = true) -> bool +GitVersion.SemanticVersion.IsGreaterThan(GitVersion.SemanticVersion? value, bool includePreRelease = true) -> bool +GitVersion.SemanticVersion.IsGreaterThanOrEqualTo(GitVersion.SemanticVersion? value, bool includePreRelease = true) -> bool +GitVersion.SemanticVersion.IsLabeledWith(string! value) -> bool +GitVersion.SemanticVersion.IsLessThan(GitVersion.SemanticVersion? value, bool includePreRelease = true) -> bool +GitVersion.SemanticVersion.IsLessThanOrEqualTo(GitVersion.SemanticVersion? value, bool includePreRelease = true) -> bool +GitVersion.SemanticVersion.IsMatchForBranchSpecificLabel(string? value) -> bool +GitVersion.SemanticVersion.IsPreRelease.get -> bool +GitVersion.SemanticVersion.Major.get -> long +GitVersion.SemanticVersion.Major.init -> void +GitVersion.SemanticVersion.Minor.get -> long +GitVersion.SemanticVersion.Minor.init -> void +GitVersion.SemanticVersion.Patch.get -> long +GitVersion.SemanticVersion.Patch.init -> void +GitVersion.SemanticVersion.PreReleaseTag.get -> GitVersion.SemanticVersionPreReleaseTag! +GitVersion.SemanticVersion.PreReleaseTag.init -> void +GitVersion.SemanticVersion.SemanticVersion(GitVersion.SemanticVersion! semanticVersion) -> void +GitVersion.SemanticVersion.SemanticVersion(long major = 0, long minor = 0, long patch = 0) -> void +GitVersion.SemanticVersion.ToString(string! format) -> string! +GitVersion.SemanticVersion.ToString(string? format, System.IFormatProvider? formatProvider) -> string! +GitVersion.SemanticVersion.WithLabel(string? label) -> GitVersion.SemanticVersion! +GitVersion.SemanticVersionBuildMetaData +GitVersion.SemanticVersionBuildMetaData.Branch.get -> string? +GitVersion.SemanticVersionBuildMetaData.Branch.init -> void +GitVersion.SemanticVersionBuildMetaData.CommitDate.get -> System.DateTimeOffset? +GitVersion.SemanticVersionBuildMetaData.CommitDate.init -> void +GitVersion.SemanticVersionBuildMetaData.CommitsSinceTag.get -> long? +GitVersion.SemanticVersionBuildMetaData.CommitsSinceTag.init -> void +GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSource.get -> long +GitVersion.SemanticVersionBuildMetaData.CommitsSinceVersionSource.init -> void +GitVersion.SemanticVersionBuildMetaData.Equals(GitVersion.SemanticVersionBuildMetaData? other) -> bool +GitVersion.SemanticVersionBuildMetaData.OtherMetaData.get -> string? +GitVersion.SemanticVersionBuildMetaData.OtherMetaData.init -> void +GitVersion.SemanticVersionBuildMetaData.SemanticVersionBuildMetaData() -> void +GitVersion.SemanticVersionBuildMetaData.SemanticVersionBuildMetaData(GitVersion.SemanticVersionBuildMetaData! buildMetaData) -> void +GitVersion.SemanticVersionBuildMetaData.SemanticVersionBuildMetaData(string? versionSourceSha, long? commitsSinceTag, string? branch, string? commitSha, string? commitShortSha, System.DateTimeOffset? commitDate, long numberOfUnCommittedChanges, string? otherMetadata = null) -> void +GitVersion.SemanticVersionBuildMetaData.Sha.get -> string? +GitVersion.SemanticVersionBuildMetaData.Sha.init -> void +GitVersion.SemanticVersionBuildMetaData.ShortSha.get -> string? +GitVersion.SemanticVersionBuildMetaData.ShortSha.init -> void +GitVersion.SemanticVersionBuildMetaData.ToString(string! format) -> string! +GitVersion.SemanticVersionBuildMetaData.ToString(string? format, System.IFormatProvider? formatProvider) -> string! +GitVersion.SemanticVersionBuildMetaData.UncommittedChanges.get -> long +GitVersion.SemanticVersionBuildMetaData.UncommittedChanges.init -> void +GitVersion.SemanticVersionBuildMetaData.VersionSourceSha.get -> string? +GitVersion.SemanticVersionBuildMetaData.VersionSourceSha.init -> void +GitVersion.SemanticVersionFormat +GitVersion.SemanticVersionFormat.Loose = 1 -> GitVersion.SemanticVersionFormat +GitVersion.SemanticVersionFormat.Strict = 0 -> GitVersion.SemanticVersionFormat +GitVersion.SemanticVersionFormatValues +GitVersion.SemanticVersionFormatValues.AssemblyFileSemVer.get -> string? +GitVersion.SemanticVersionFormatValues.AssemblySemVer.get -> string? +GitVersion.SemanticVersionFormatValues.BranchName.get -> string? +GitVersion.SemanticVersionFormatValues.BuildMetaData.get -> string! +GitVersion.SemanticVersionFormatValues.CommitDate.get -> string? +GitVersion.SemanticVersionFormatValues.CommitsSinceVersionSource.get -> string! +GitVersion.SemanticVersionFormatValues.EscapedBranchName.get -> string? +GitVersion.SemanticVersionFormatValues.FullBuildMetaData.get -> string! +GitVersion.SemanticVersionFormatValues.FullSemVer.get -> string! +GitVersion.SemanticVersionFormatValues.InformationalVersion.get -> string! +GitVersion.SemanticVersionFormatValues.Major.get -> string! +GitVersion.SemanticVersionFormatValues.MajorMinorPatch.get -> string! +GitVersion.SemanticVersionFormatValues.Minor.get -> string! +GitVersion.SemanticVersionFormatValues.Patch.get -> string! +GitVersion.SemanticVersionFormatValues.PreReleaseLabel.get -> string! +GitVersion.SemanticVersionFormatValues.PreReleaseLabelWithDash.get -> string! +GitVersion.SemanticVersionFormatValues.PreReleaseNumber.get -> string! +GitVersion.SemanticVersionFormatValues.PreReleaseTag.get -> string! +GitVersion.SemanticVersionFormatValues.PreReleaseTagWithDash.get -> string! +GitVersion.SemanticVersionFormatValues.SemanticVersionFormatValues(GitVersion.SemanticVersion! semver, GitVersion.Configuration.IGitVersionConfiguration! configuration, int preReleaseWeight) -> void +GitVersion.SemanticVersionFormatValues.SemVer.get -> string! +GitVersion.SemanticVersionFormatValues.Sha.get -> string? +GitVersion.SemanticVersionFormatValues.ShortSha.get -> string? +GitVersion.SemanticVersionFormatValues.UncommittedChanges.get -> string! +GitVersion.SemanticVersionFormatValues.VersionSourceSha.get -> string? +GitVersion.SemanticVersionFormatValues.WeightedPreReleaseNumber.get -> string! +GitVersion.SemanticVersionPreReleaseTag +GitVersion.SemanticVersionPreReleaseTag.CompareTo(GitVersion.SemanticVersionPreReleaseTag? other) -> int +GitVersion.SemanticVersionPreReleaseTag.Equals(GitVersion.SemanticVersionPreReleaseTag? other) -> bool +GitVersion.SemanticVersionPreReleaseTag.HasTag() -> bool +GitVersion.SemanticVersionPreReleaseTag.Name.get -> string! +GitVersion.SemanticVersionPreReleaseTag.Name.init -> void +GitVersion.SemanticVersionPreReleaseTag.Number.get -> long? +GitVersion.SemanticVersionPreReleaseTag.Number.init -> void +GitVersion.SemanticVersionPreReleaseTag.PromoteTagEvenIfNameIsEmpty.get -> bool +GitVersion.SemanticVersionPreReleaseTag.PromoteTagEvenIfNameIsEmpty.init -> void +GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag() -> void +GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(GitVersion.SemanticVersionPreReleaseTag! preReleaseTag) -> void +GitVersion.SemanticVersionPreReleaseTag.SemanticVersionPreReleaseTag(string! name, long? number, bool promoteTagEvenIfNameIsEmpty) -> void +GitVersion.SemanticVersionPreReleaseTag.ToString(string! format) -> string! +GitVersion.SemanticVersionPreReleaseTag.ToString(string? format, System.IFormatProvider? formatProvider) -> string! +GitVersion.SemanticVersionWithTag +GitVersion.SemanticVersionWithTag.CompareTo(GitVersion.SemanticVersionWithTag? other) -> int +GitVersion.SemanticVersionWithTag.SemanticVersionWithTag(GitVersion.SemanticVersion! Value, GitVersion.Git.ITag! Tag) -> void +GitVersion.SemanticVersionWithTag.Tag.get -> GitVersion.Git.ITag! +GitVersion.SemanticVersionWithTag.Tag.init -> void +GitVersion.SemanticVersionWithTag.Value.get -> GitVersion.SemanticVersion! +GitVersion.SemanticVersionWithTag.Value.init -> void +GitVersion.Settings +GitVersion.Settings.NoCache -> bool +GitVersion.Settings.NoFetch -> bool +GitVersion.Settings.NoNormalize -> bool +GitVersion.Settings.OnlyTrackedBranches -> bool +GitVersion.VersionCalculation.BaseVersion +GitVersion.VersionCalculation.BaseVersion.BaseVersion() -> void +GitVersion.VersionCalculation.BaseVersion.BaseVersion(GitVersion.VersionCalculation.BaseVersionOperand! Operand) -> void +GitVersion.VersionCalculation.BaseVersion.BaseVersion(string! source, GitVersion.SemanticVersion! semanticVersion, GitVersion.Git.ICommit? baseVersionSource = null) -> void +GitVersion.VersionCalculation.BaseVersion.BaseVersionSource.get -> GitVersion.Git.ICommit? +GitVersion.VersionCalculation.BaseVersion.GetIncrementedVersion() -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.BaseVersion.Operand.get -> GitVersion.VersionCalculation.BaseVersionOperand! +GitVersion.VersionCalculation.BaseVersion.Operand.init -> void +GitVersion.VersionCalculation.BaseVersion.Operator.get -> GitVersion.VersionCalculation.BaseVersionOperator? +GitVersion.VersionCalculation.BaseVersion.Operator.init -> void +GitVersion.VersionCalculation.BaseVersion.SemanticVersion.get -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.BaseVersion.ShouldIncrement.get -> bool +GitVersion.VersionCalculation.BaseVersion.Source.get -> string! +GitVersion.VersionCalculation.BaseVersionOperand +GitVersion.VersionCalculation.BaseVersionOperand.BaseVersionOperand() -> void +GitVersion.VersionCalculation.BaseVersionOperand.BaseVersionOperand(string! Source, GitVersion.SemanticVersion! SemanticVersion, GitVersion.Git.ICommit? BaseVersionSource = null) -> void +GitVersion.VersionCalculation.BaseVersionOperand.BaseVersionSource.get -> GitVersion.Git.ICommit? +GitVersion.VersionCalculation.BaseVersionOperand.BaseVersionSource.init -> void +GitVersion.VersionCalculation.BaseVersionOperand.SemanticVersion.get -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.BaseVersionOperand.SemanticVersion.init -> void +GitVersion.VersionCalculation.BaseVersionOperand.Source.get -> string! +GitVersion.VersionCalculation.BaseVersionOperand.Source.init -> void +GitVersion.VersionCalculation.BaseVersionOperator +GitVersion.VersionCalculation.BaseVersionOperator.AlternativeSemanticVersion.get -> GitVersion.SemanticVersion? +GitVersion.VersionCalculation.BaseVersionOperator.AlternativeSemanticVersion.init -> void +GitVersion.VersionCalculation.BaseVersionOperator.BaseVersionSource.get -> GitVersion.Git.ICommit? +GitVersion.VersionCalculation.BaseVersionOperator.BaseVersionSource.init -> void +GitVersion.VersionCalculation.BaseVersionOperator.ForceIncrement.get -> bool +GitVersion.VersionCalculation.BaseVersionOperator.ForceIncrement.init -> void +GitVersion.VersionCalculation.BaseVersionOperator.Increment.get -> GitVersion.VersionField +GitVersion.VersionCalculation.BaseVersionOperator.Increment.init -> void +GitVersion.VersionCalculation.BaseVersionOperator.Label.get -> string? +GitVersion.VersionCalculation.BaseVersionOperator.Label.init -> void +GitVersion.VersionCalculation.BaseVersionOperator.Source.get -> string! +GitVersion.VersionCalculation.BaseVersionOperator.Source.init -> void +GitVersion.VersionCalculation.Caching.GitVersionCacheKey +GitVersion.VersionCalculation.Caching.GitVersionCacheKey.GitVersionCacheKey(string! Value) -> void +GitVersion.VersionCalculation.Caching.GitVersionCacheKey.Value.get -> string! +GitVersion.VersionCalculation.Caching.GitVersionCacheKey.Value.init -> void +GitVersion.VersionCalculation.Caching.IGitVersionCacheProvider +GitVersion.VersionCalculation.Caching.IGitVersionCacheProvider.LoadVersionVariablesFromDiskCache() -> GitVersion.OutputVariables.GitVersionVariables? +GitVersion.VersionCalculation.Caching.IGitVersionCacheProvider.WriteVariablesToDiskCache(GitVersion.OutputVariables.GitVersionVariables! versionVariables) -> void +GitVersion.VersionCalculation.CommitMessageIncrementMode +GitVersion.VersionCalculation.CommitMessageIncrementMode.Disabled = 1 -> GitVersion.VersionCalculation.CommitMessageIncrementMode +GitVersion.VersionCalculation.CommitMessageIncrementMode.Enabled = 0 -> GitVersion.VersionCalculation.CommitMessageIncrementMode +GitVersion.VersionCalculation.CommitMessageIncrementMode.MergeMessageOnly = 2 -> GitVersion.VersionCalculation.CommitMessageIncrementMode +GitVersion.VersionCalculation.DeploymentMode +GitVersion.VersionCalculation.DeploymentMode.ContinuousDelivery = 1 -> GitVersion.VersionCalculation.DeploymentMode +GitVersion.VersionCalculation.DeploymentMode.ContinuousDeployment = 2 -> GitVersion.VersionCalculation.DeploymentMode +GitVersion.VersionCalculation.DeploymentMode.ManualDeployment = 0 -> GitVersion.VersionCalculation.DeploymentMode +GitVersion.VersionCalculation.IBaseVersion +GitVersion.VersionCalculation.IBaseVersion.SemanticVersion.get -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.IBaseVersionIncrement +GitVersion.VersionCalculation.IBaseVersionIncrement.BaseVersionSource.get -> GitVersion.Git.ICommit? +GitVersion.VersionCalculation.IBaseVersionIncrement.Source.get -> string! +GitVersion.VersionCalculation.IDeploymentModeCalculator +GitVersion.VersionCalculation.IDeploymentModeCalculator.Calculate(GitVersion.SemanticVersion! semanticVersion, GitVersion.Git.ICommit? baseVersionSource) -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder +GitVersion.VersionCalculation.IEffectiveBranchConfigurationFinder.GetConfigurations(GitVersion.Git.IBranch! branch, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> System.Collections.Generic.IEnumerable! +GitVersion.VersionCalculation.IIncrementStrategyFinder +GitVersion.VersionCalculation.IIncrementStrategyFinder.DetermineIncrementedField(GitVersion.Git.ICommit! currentCommit, GitVersion.Git.ICommit? baseVersionSource, bool shouldIncrement, GitVersion.Configuration.EffectiveConfiguration! configuration, string? label) -> GitVersion.VersionField +GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForcedByCommit(GitVersion.Git.ICommit! commit, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> GitVersion.VersionField +GitVersion.VersionCalculation.IIncrementStrategyFinder.GetIncrementForCommits(string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, GitVersion.Git.ICommit![]! commits) -> GitVersion.VersionField? +GitVersion.VersionCalculation.IIncrementStrategyFinder.GetMergedCommits(GitVersion.Git.ICommit! mergeCommit, int index, GitVersion.Configuration.IIgnoreConfiguration! ignore) -> System.Collections.Generic.IEnumerable! +GitVersion.VersionCalculation.INextVersionCalculator +GitVersion.VersionCalculation.INextVersionCalculator.FindVersion() -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.IVariableProvider +GitVersion.VersionCalculation.IVariableProvider.GetVariablesFor(GitVersion.SemanticVersion! semanticVersion, GitVersion.Configuration.IGitVersionConfiguration! configuration, int preReleaseWeight) -> GitVersion.OutputVariables.GitVersionVariables! +GitVersion.VersionCalculation.IVersionFilter +GitVersion.VersionCalculation.IVersionFilter.Exclude(GitVersion.VersionCalculation.IBaseVersion! baseVersion, out string? reason) -> bool +GitVersion.VersionCalculation.IVersionStrategy +GitVersion.VersionCalculation.IVersionStrategy.GetBaseVersions(GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> System.Collections.Generic.IEnumerable! +GitVersion.VersionCalculation.NextVersion +GitVersion.VersionCalculation.NextVersion.BaseVersion.get -> GitVersion.VersionCalculation.IBaseVersion! +GitVersion.VersionCalculation.NextVersion.BranchConfiguration.get -> GitVersion.Configuration.EffectiveBranchConfiguration! +GitVersion.VersionCalculation.NextVersion.CompareTo(GitVersion.VersionCalculation.NextVersion? other) -> int +GitVersion.VersionCalculation.NextVersion.Configuration.get -> GitVersion.Configuration.EffectiveConfiguration! +GitVersion.VersionCalculation.NextVersion.Equals(GitVersion.VersionCalculation.NextVersion? other) -> bool +GitVersion.VersionCalculation.NextVersion.IncrementedVersion.get -> GitVersion.SemanticVersion! +GitVersion.VersionCalculation.NextVersion.NextVersion(GitVersion.SemanticVersion! incrementedVersion, GitVersion.VersionCalculation.IBaseVersion! baseVersion, GitVersion.Configuration.EffectiveBranchConfiguration! configuration) -> void +GitVersion.VersionCalculation.VersionCalculationModule +GitVersion.VersionCalculation.VersionCalculationModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void +GitVersion.VersionCalculation.VersionCalculationModule.VersionCalculationModule() -> void +GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.ConfiguredNextVersion = 2 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.Fallback = 1 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.Mainline = 64 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.MergeMessage = 4 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.None = 0 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.TaggedCommit = 8 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.TrackReleaseBranches = 16 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategies.VersionInBranchName = 32 -> GitVersion.VersionCalculation.VersionStrategies +GitVersion.VersionCalculation.VersionStrategyModule +GitVersion.VersionCalculation.VersionStrategyModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void +GitVersion.VersionCalculation.VersionStrategyModule.VersionStrategyModule() -> void +GitVersion.VersionField +GitVersion.VersionField.Major = 3 -> GitVersion.VersionField +GitVersion.VersionField.Minor = 2 -> GitVersion.VersionField +GitVersion.VersionField.None = 0 -> GitVersion.VersionField +GitVersion.VersionField.Patch = 1 -> GitVersion.VersionField +GitVersion.WarningException +GitVersion.WarningException.WarningException() -> void +GitVersion.WarningException.WarningException(string! message) -> void +GitVersion.WarningException.WarningException(string? message, System.Exception? innerException) -> void +GitVersion.WixInfo +GitVersion.WixInfo.UpdateWixVersionFile -> bool +override GitVersion.Git.BranchCommit.Equals(object? obj) -> bool +override GitVersion.Git.BranchCommit.GetHashCode() -> int +override GitVersion.Git.ReferenceName.Equals(object? obj) -> bool +override GitVersion.Git.ReferenceName.GetHashCode() -> int +override GitVersion.Git.ReferenceName.ToString() -> string! +override GitVersion.Helpers.LambdaKeyComparer.Compare(TSource? x, TSource? y) -> int +override GitVersion.SemanticVersion.Equals(object? obj) -> bool +override GitVersion.SemanticVersion.GetHashCode() -> int +override GitVersion.SemanticVersion.ToString() -> string! +override GitVersion.SemanticVersionBuildMetaData.Equals(object? obj) -> bool +override GitVersion.SemanticVersionBuildMetaData.GetHashCode() -> int +override GitVersion.SemanticVersionBuildMetaData.ToString() -> string! +override GitVersion.SemanticVersionPreReleaseTag.Equals(object? obj) -> bool +override GitVersion.SemanticVersionPreReleaseTag.GetHashCode() -> int +override GitVersion.SemanticVersionPreReleaseTag.ToString() -> string! +override GitVersion.SemanticVersionWithTag.ToString() -> string! +override GitVersion.VersionCalculation.BaseVersion.ToString() -> string! +override GitVersion.VersionCalculation.BaseVersionOperand.ToString() -> string! +override GitVersion.VersionCalculation.BaseVersionOperator.ToString() -> string! +override GitVersion.VersionCalculation.NextVersion.Equals(object? other) -> bool +override GitVersion.VersionCalculation.NextVersion.GetHashCode() -> int +override GitVersion.VersionCalculation.NextVersion.ToString() -> string! +static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! source, out (GitVersion.SemanticVersion! Value, string? Name) result, GitVersion.Configuration.EffectiveConfiguration! configuration) -> bool +static GitVersion.Configuration.ReferenceNameExtensions.TryGetSemanticVersion(this GitVersion.Git.ReferenceName! source, out (GitVersion.SemanticVersion! Value, string? Name) result, GitVersion.Configuration.IGitVersionConfiguration! configuration) -> bool +static GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.GetAssemblyFileVersion(this GitVersion.SemanticVersion! sv, GitVersion.Configuration.AssemblyFileVersioningScheme scheme) -> string? +static GitVersion.Extensions.AssemblyVersionsGeneratorExtensions.GetAssemblyVersion(this GitVersion.SemanticVersion! sv, GitVersion.Configuration.AssemblyVersioningScheme scheme) -> string? +static GitVersion.Extensions.CommonExtensions.NotNull(this T? value, string! name = "") -> T! +static GitVersion.Extensions.CommonExtensions.NotNullOrEmpty(this string? value, string! name = "") -> string! +static GitVersion.Extensions.CommonExtensions.NotNullOrWhitespace(this string? value, string! name = "") -> string! +static GitVersion.Extensions.DictionaryExtensions.GetOrAdd(this System.Collections.Generic.IDictionary! dict, TKey key, System.Func! getValue) -> TValue +static GitVersion.Extensions.EnumerableExtensions.AddRange(this System.Collections.Generic.ICollection! source, System.Collections.Generic.IEnumerable! items) -> void +static GitVersion.Extensions.EnumerableExtensions.OnlyOrDefault(this System.Collections.Generic.IEnumerable! source) -> T? +static GitVersion.Extensions.EnumerableExtensions.SingleOfType(this System.Collections.IEnumerable! source) -> T +static GitVersion.Extensions.GitExtensions.CreateGitLogArgs(int? maxCommits) -> string! +static GitVersion.Extensions.GitExtensions.DumpGraph(string! workingDirectory, System.Action? writer = null, int? maxCommits = null) -> void +static GitVersion.Extensions.IncrementStrategyExtensions.ToVersionField(this GitVersion.IncrementStrategy strategy) -> GitVersion.VersionField +static GitVersion.Extensions.ReadEmbeddedResourceExtensions.ReadAsStringFromEmbeddedResource(this string! resourceName, System.Reflection.Assembly! assembly) -> string! +static GitVersion.Extensions.ReadEmbeddedResourceExtensions.ReadAsStringFromEmbeddedResource(this string! resourceName) -> string! +static GitVersion.Extensions.ServiceCollectionExtensions.AddModule(this Microsoft.Extensions.DependencyInjection.IServiceCollection! serviceCollection, GitVersion.IGitVersionModule! gitVersionModule) -> Microsoft.Extensions.DependencyInjection.IServiceCollection! +static GitVersion.Extensions.ServiceCollectionExtensions.GetServiceForType(this System.IServiceProvider! serviceProvider) -> TService +static GitVersion.Extensions.StringExtensions.AppendLineFormat(this System.Text.StringBuilder! stringBuilder, string! format, params object![]! args) -> void +static GitVersion.Extensions.StringExtensions.IsEmpty(this string? value) -> bool +static GitVersion.Extensions.StringExtensions.IsEquivalentTo(this string! self, string? other) -> bool +static GitVersion.Extensions.StringExtensions.IsNullOrEmpty(this string? value) -> bool +static GitVersion.Extensions.StringExtensions.IsNullOrWhiteSpace(this string? value) -> bool +static GitVersion.Extensions.StringExtensions.RegexReplace(this string! input, string! pattern, string! replace, System.Text.RegularExpressions.RegexOptions options = System.Text.RegularExpressions.RegexOptions.None) -> string! +static GitVersion.Extensions.StringExtensions.WithPrefixIfNotNullOrEmpty(this string! value, string! prefix) -> string! +static GitVersion.Git.BranchCommit.operator !=(GitVersion.Git.BranchCommit left, GitVersion.Git.BranchCommit right) -> bool +static GitVersion.Git.BranchCommit.operator ==(GitVersion.Git.BranchCommit left, GitVersion.Git.BranchCommit right) -> bool +static GitVersion.Git.CommitExtensions.IsMergeCommit(this GitVersion.Git.ICommit! source) -> bool +static GitVersion.Git.ReferenceName.FromBranchName(string! branchName) -> GitVersion.Git.ReferenceName! +static GitVersion.Git.ReferenceName.operator !=(GitVersion.Git.ReferenceName? left, GitVersion.Git.ReferenceName? right) -> bool +static GitVersion.Git.ReferenceName.operator ==(GitVersion.Git.ReferenceName? left, GitVersion.Git.ReferenceName? right) -> bool +static GitVersion.Git.ReferenceName.Parse(string! canonicalName) -> GitVersion.Git.ReferenceName! +static GitVersion.Git.ReferenceName.TryParse(out GitVersion.Git.ReferenceName? value, string! canonicalName) -> bool +static GitVersion.Helpers.Disposable.Create(System.Action! disposer) -> System.IDisposable! +static GitVersion.Helpers.Disposable.Create(T value, System.Action! disposer) -> GitVersion.Helpers.IDisposable! +static GitVersion.Helpers.EncodingHelper.DetectEncoding(System.Collections.Generic.IList! bytes) -> System.Text.Encoding? +static GitVersion.Helpers.EncodingHelper.DetectEncoding(string? filename) -> System.Text.Encoding? +static GitVersion.Helpers.ServiceMessageEscapeHelper.EscapeValue(string? value) -> string? +static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.Debug(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.DiagnosticVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! +static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.Error(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.Info(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.MinimalVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! +static GitVersion.Logging.LogExtensions.NormalVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! +static GitVersion.Logging.LogExtensions.QuietVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! +static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.Verbose(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.VerboseVerbosity(this GitVersion.Logging.ILog! log) -> System.IDisposable! +static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, GitVersion.Logging.LogAction! logAction) -> void +static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, GitVersion.Logging.Verbosity verbosity, string! format, params object![]! args) -> void +static GitVersion.Logging.LogExtensions.Warning(this GitVersion.Logging.ILog! log, string! format, params object![]! args) -> void +static GitVersion.MergeMessage.TryParse(GitVersion.Git.ICommit! mergeCommit, GitVersion.Configuration.IGitVersionConfiguration! configuration, out GitVersion.MergeMessage? mergeMessage) -> bool +static GitVersion.SemanticVersion.Parse(string! version, string? tagPrefixRegex, GitVersion.SemanticVersionFormat versionFormat = GitVersion.SemanticVersionFormat.Strict) -> GitVersion.SemanticVersion! +static GitVersion.SemanticVersion.operator !=(GitVersion.SemanticVersion? v1, GitVersion.SemanticVersion? v2) -> bool +static GitVersion.SemanticVersion.operator <(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool +static GitVersion.SemanticVersion.operator <=(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool +static GitVersion.SemanticVersion.operator ==(GitVersion.SemanticVersion? v1, GitVersion.SemanticVersion? v2) -> bool +static GitVersion.SemanticVersion.operator >(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool +static GitVersion.SemanticVersion.operator >=(GitVersion.SemanticVersion! v1, GitVersion.SemanticVersion! v2) -> bool +static GitVersion.SemanticVersion.TryParse(string! version, string? tagPrefixRegex, out GitVersion.SemanticVersion? semanticVersion, GitVersion.SemanticVersionFormat format = GitVersion.SemanticVersionFormat.Strict) -> bool +static GitVersion.SemanticVersionBuildMetaData.Parse(string? buildMetaData) -> GitVersion.SemanticVersionBuildMetaData! +static GitVersion.SemanticVersionBuildMetaData.implicit operator GitVersion.SemanticVersionBuildMetaData!(string! preReleaseTag) -> GitVersion.SemanticVersionBuildMetaData! +static GitVersion.SemanticVersionBuildMetaData.implicit operator string?(GitVersion.SemanticVersionBuildMetaData? preReleaseTag) -> string? +static GitVersion.SemanticVersionBuildMetaData.operator !=(GitVersion.SemanticVersionBuildMetaData? left, GitVersion.SemanticVersionBuildMetaData? right) -> bool +static GitVersion.SemanticVersionBuildMetaData.operator ==(GitVersion.SemanticVersionBuildMetaData? left, GitVersion.SemanticVersionBuildMetaData? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.implicit operator GitVersion.SemanticVersionPreReleaseTag!(string? preReleaseTag) -> GitVersion.SemanticVersionPreReleaseTag! +static GitVersion.SemanticVersionPreReleaseTag.implicit operator string?(GitVersion.SemanticVersionPreReleaseTag? preReleaseTag) -> string? +static GitVersion.SemanticVersionPreReleaseTag.operator !=(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.operator <(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.operator <=(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.operator ==(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.operator >(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.operator >=(GitVersion.SemanticVersionPreReleaseTag? left, GitVersion.SemanticVersionPreReleaseTag? right) -> bool +static GitVersion.SemanticVersionPreReleaseTag.Parse(string? preReleaseTag) -> GitVersion.SemanticVersionPreReleaseTag! +static GitVersion.VersionCalculation.NextVersion.operator !=(GitVersion.VersionCalculation.NextVersion! left, GitVersion.VersionCalculation.NextVersion! right) -> bool +static GitVersion.VersionCalculation.NextVersion.operator <(GitVersion.VersionCalculation.NextVersion! left, GitVersion.VersionCalculation.NextVersion! right) -> bool +static GitVersion.VersionCalculation.NextVersion.operator <=(GitVersion.VersionCalculation.NextVersion! left, GitVersion.VersionCalculation.NextVersion! right) -> bool +static GitVersion.VersionCalculation.NextVersion.operator ==(GitVersion.VersionCalculation.NextVersion! left, GitVersion.VersionCalculation.NextVersion? right) -> bool +static GitVersion.VersionCalculation.NextVersion.operator >(GitVersion.VersionCalculation.NextVersion! left, GitVersion.VersionCalculation.NextVersion! right) -> bool +static GitVersion.VersionCalculation.NextVersion.operator >=(GitVersion.VersionCalculation.NextVersion! left, GitVersion.VersionCalculation.NextVersion! right) -> bool +static readonly GitVersion.Git.BranchCommit.Empty -> GitVersion.Git.BranchCommit +static readonly GitVersion.Helpers.Disposable.Empty -> System.IDisposable! +static readonly GitVersion.SemanticVersion.Empty -> GitVersion.SemanticVersion! +static readonly GitVersion.SemanticVersionBuildMetaData.Empty -> GitVersion.SemanticVersionBuildMetaData! +static readonly GitVersion.SemanticVersionPreReleaseTag.Empty -> GitVersion.SemanticVersionPreReleaseTag! diff --git a/src/GitVersion.Core/SemVer/SemanticVersion.cs b/src/GitVersion.Core/SemVer/SemanticVersion.cs new file mode 100644 index 0000000000..130d21d72e --- /dev/null +++ b/src/GitVersion.Core/SemVer/SemanticVersion.cs @@ -0,0 +1,463 @@ +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.Text.RegularExpressions; +using GitVersion.Extensions; + +namespace GitVersion; + +public class SemanticVersion : IFormattable, IComparable, IEquatable +{ + public static readonly SemanticVersion Empty = new(); + + // uses the git-semver spec https://github.com/semver/semver/blob/master/semver.md + private static readonly Regex ParseSemVerStrict = new( + @"^(?0|[1-9]\d*)\.(?0|[1-9]\d*)\.(?0|[1-9]\d*)(?:-(?(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + + private static readonly Regex ParseSemVerLoose = new( + @"^(?(?\d+)(\.(?\d+))?(\.(?\d+))?)(\.(?\d+))?(-(?[^\+]*))?(\+(?.*))?$", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + + public long Major { get; init; } + + public long Minor { get; init; } + + public long Patch { get; init; } + + public bool IsPreRelease => PreReleaseTag.HasTag(); + + public SemanticVersionPreReleaseTag PreReleaseTag { get; init; } + + public SemanticVersionBuildMetaData BuildMetaData { get; init; } + + public bool IsLabeledWith(string value) => PreReleaseTag.HasTag() && PreReleaseTag.Name.IsEquivalentTo(value); + + public bool IsMatchForBranchSpecificLabel(string? value) + => (PreReleaseTag.Name.Length == 0 && PreReleaseTag.Number is null) || value is null || IsLabeledWith(value); + + public SemanticVersion(long major = 0, long minor = 0, long patch = 0) + { + this.Major = major; + this.Minor = minor; + this.Patch = patch; + this.PreReleaseTag = SemanticVersionPreReleaseTag.Empty; + this.BuildMetaData = SemanticVersionBuildMetaData.Empty; + } + + public SemanticVersion(SemanticVersion semanticVersion) + { + semanticVersion.NotNull(); + + this.Major = semanticVersion.Major; + this.Minor = semanticVersion.Minor; + this.Patch = semanticVersion.Patch; + + this.PreReleaseTag = semanticVersion.PreReleaseTag; + this.BuildMetaData = semanticVersion.BuildMetaData; + } + + public bool Equals(SemanticVersion? obj) + { + if (obj == null) + { + return false; + } + return this.Major == obj.Major + && this.Minor == obj.Minor + && this.Patch == obj.Patch + && this.PreReleaseTag == obj.PreReleaseTag + && this.BuildMetaData == obj.BuildMetaData; + } + + public bool IsEmpty() => Equals(Empty); + + public override bool Equals(object? obj) + { + if (obj is null) + { + return false; + } + if (ReferenceEquals(this, obj)) + { + return true; + } + return obj.GetType() == GetType() && Equals((SemanticVersion)obj); + } + + public override int GetHashCode() + { + unchecked + { + var hashCode = this.Major.GetHashCode(); + hashCode = (hashCode * 397) ^ this.Minor.GetHashCode(); + hashCode = (hashCode * 397) ^ this.Patch.GetHashCode(); + hashCode = (hashCode * 397) ^ this.PreReleaseTag.GetHashCode(); + hashCode = (hashCode * 397) ^ this.BuildMetaData.GetHashCode(); + return hashCode; + } + } + + public static bool operator ==(SemanticVersion? v1, SemanticVersion? v2) + { + if (v1 is null) + { + return v2 is null; + } + return v1.Equals(v2); + } + + public static bool operator !=(SemanticVersion? v1, SemanticVersion? v2) => !(v1 == v2); + + public static bool operator >(SemanticVersion v1, SemanticVersion v2) + { + if (v1 == null) + throw new ArgumentNullException(nameof(v1)); + if (v2 == null) + throw new ArgumentNullException(nameof(v2)); + + return v1.CompareTo(v2) > 0; + } + + public static bool operator >=(SemanticVersion v1, SemanticVersion v2) + { + if (v1 == null) + throw new ArgumentNullException(nameof(v1)); + if (v2 == null) + throw new ArgumentNullException(nameof(v2)); + + return v1.CompareTo(v2) >= 0; + } + + public static bool operator <=(SemanticVersion v1, SemanticVersion v2) + { + if (v1 == null) + throw new ArgumentNullException(nameof(v1)); + if (v2 == null) + throw new ArgumentNullException(nameof(v2)); + + return v1.CompareTo(v2) <= 0; + } + + public static bool operator <(SemanticVersion v1, SemanticVersion v2) + { + if (v1 == null) + throw new ArgumentNullException(nameof(v1)); + if (v2 == null) + throw new ArgumentNullException(nameof(v2)); + + return v1.CompareTo(v2) < 0; + } + + public static SemanticVersion Parse( + string version, string? tagPrefixRegex, SemanticVersionFormat versionFormat = SemanticVersionFormat.Strict) + { + if (!TryParse(version, tagPrefixRegex, out var semanticVersion, versionFormat)) + throw new WarningException($"Failed to parse {version} into a Semantic Version"); + + return semanticVersion; + } + + public static bool TryParse(string version, string? tagPrefixRegex, + [NotNullWhen(true)] out SemanticVersion? semanticVersion, SemanticVersionFormat format = SemanticVersionFormat.Strict) + { + var match = Regex.Match(version, $"^({tagPrefixRegex})(?.*)$"); + + if (!match.Success) + { + semanticVersion = null; + return false; + } + + version = match.Groups["version"].Value; + return format == SemanticVersionFormat.Strict + ? TryParseStrict(version, out semanticVersion) + : TryParseLoose(version, out semanticVersion); + } + + private static bool TryParseStrict(string version, [NotNullWhen(true)] out SemanticVersion? semanticVersion) + { + var parsed = ParseSemVerStrict.Match(version); + + if (!parsed.Success) + { + semanticVersion = null; + return false; + } + + semanticVersion = new() + { + Major = long.Parse(parsed.Groups["major"].Value), + Minor = parsed.Groups["minor"].Success ? long.Parse(parsed.Groups["minor"].Value) : 0, + Patch = parsed.Groups["patch"].Success ? long.Parse(parsed.Groups["patch"].Value) : 0, + PreReleaseTag = SemanticVersionPreReleaseTag.Parse(parsed.Groups["prerelease"].Value), + BuildMetaData = SemanticVersionBuildMetaData.Parse(parsed.Groups["buildmetadata"].Value) + }; + + return true; + } + + private static bool TryParseLoose(string version, [NotNullWhen(true)] out SemanticVersion? semanticVersion) + { + var parsed = ParseSemVerLoose.Match(version); + + if (!parsed.Success) + { + semanticVersion = null; + return false; + } + + var semanticVersionBuildMetaData = SemanticVersionBuildMetaData.Parse(parsed.Groups["BuildMetaData"].Value); + var fourthPart = parsed.Groups["FourthPart"]; + if (fourthPart.Success && semanticVersionBuildMetaData.CommitsSinceTag == null) + { + semanticVersionBuildMetaData = new(semanticVersionBuildMetaData) + { + CommitsSinceTag = int.Parse(fourthPart.Value) + }; + } + + semanticVersion = new() + { + Major = long.Parse(parsed.Groups["Major"].Value), + Minor = parsed.Groups["Minor"].Success ? long.Parse(parsed.Groups["Minor"].Value) : 0, + Patch = parsed.Groups["Patch"].Success ? long.Parse(parsed.Groups["Patch"].Value) : 0, + PreReleaseTag = SemanticVersionPreReleaseTag.Parse(parsed.Groups["Tag"].Value), + BuildMetaData = semanticVersionBuildMetaData + }; + + return true; + } + + public bool IsGreaterThan(SemanticVersion? value, bool includePreRelease = true) + => CompareTo(value, includePreRelease) > 0; + + public bool IsGreaterThanOrEqualTo(SemanticVersion? value, bool includePreRelease = true) + => CompareTo(value, includePreRelease) >= 0; + + public bool IsLessThan(SemanticVersion? value, bool includePreRelease = true) + => CompareTo(value, includePreRelease) < 0; + + public bool IsLessThanOrEqualTo(SemanticVersion? value, bool includePreRelease = true) + => CompareTo(value, includePreRelease) <= 0; + + public bool IsEqualTo(SemanticVersion? value, bool includePreRelease = true) + => CompareTo(value, includePreRelease) == 0; + + public int CompareTo(SemanticVersion? value) => CompareTo(value, includePreRelease: true); + + public int CompareTo(SemanticVersion? value, bool includePreRelease) + { + if (value == null) + { + return 1; + } + if (this.Major != value.Major) + { + if (this.Major > value.Major) + { + return 1; + } + return -1; + } + if (this.Minor != value.Minor) + { + if (this.Minor > value.Minor) + { + return 1; + } + return -1; + } + if (this.Patch != value.Patch) + { + if (this.Patch > value.Patch) + { + return 1; + } + return -1; + } + if (includePreRelease && this.PreReleaseTag != value.PreReleaseTag) + { + if (this.PreReleaseTag > value.PreReleaseTag) + { + return 1; + } + return -1; + } + + return 0; + } + + public override string ToString() => ToString("s"); + + public string ToString(string format) => ToString(format, CultureInfo.CurrentCulture); + + /// + /// s - Default SemVer [1.2.3-beta.4] + /// f - Full SemVer [1.2.3-beta.4+5] + /// i - Informational SemVer [1.2.3-beta.4+5.Branch.main.BranchType.main.Sha.000000] + /// j - Just the SemVer part [1.2.3] + /// t - SemVer with the tag [1.2.3-beta.4] + /// + public string ToString(string? format, IFormatProvider? formatProvider) + { + if (format.IsNullOrEmpty()) + format = "s"; + + if (formatProvider?.GetFormat(GetType()) is ICustomFormatter formatter) + return formatter.Format(format, this, formatProvider); + + // Check for lp first because the param can vary + format = format.ToLower(); + switch (format) + { + case "j": + return $"{this.Major}.{this.Minor}.{this.Patch}"; + case "s": + return this.PreReleaseTag.HasTag() ? $"{ToString("j")}-{this.PreReleaseTag}" : ToString("j"); + case "t": + return this.PreReleaseTag.HasTag() ? $"{ToString("j")}-{this.PreReleaseTag:t}" : ToString("j"); + case "f": + { + var buildMetadata = this.BuildMetaData.ToString(); + + return !buildMetadata.IsNullOrEmpty() ? $"{ToString("s")}+{buildMetadata}" : ToString("s"); + } + case "i": + { + var buildMetadata = this.BuildMetaData.ToString("f"); + + return !buildMetadata.IsNullOrEmpty() ? $"{ToString("s")}+{buildMetadata}" : ToString("s"); + } + default: + throw new FormatException($"Unknown format '{format}'."); + } + } + + public SemanticVersion WithLabel(string? label) => Increment(VersionField.None, label, mode: IncrementMode.Standard); + + public SemanticVersion Increment( + VersionField increment, string? label, params SemanticVersion?[] alternativeSemanticVersions) + => Increment(increment, label, mode: IncrementMode.Standard, alternativeSemanticVersions); + + public SemanticVersion Increment( + VersionField increment, string? label, bool forceIncrement, params SemanticVersion?[] alternativeSemanticVersions) + => Increment(increment, label, mode: forceIncrement ? IncrementMode.Force : IncrementMode.Standard, alternativeSemanticVersions); + + public SemanticVersion Increment( + VersionField increment, string? label, IncrementMode mode, params SemanticVersion?[] alternativeSemanticVersions) + { + long major = Major; + long minor = Minor; + long patch = Patch; + long? preReleaseNumber = PreReleaseTag.Number; + + bool hasPreReleaseTag = PreReleaseTag.HasTag(); + + switch (increment) + { + case VersionField.None: + preReleaseNumber++; + break; + + case VersionField.Patch: + if (hasPreReleaseTag && (mode == IncrementMode.Standard + || mode == IncrementMode.EnsureIntegrity && patch != 0)) + { + preReleaseNumber++; + } + else + { + patch++; + if (preReleaseNumber.HasValue) preReleaseNumber = 1; + } + break; + + case VersionField.Minor: + if (hasPreReleaseTag && (mode == IncrementMode.Standard + || mode == IncrementMode.EnsureIntegrity && minor != 0 && patch == 0)) + { + preReleaseNumber++; + } + else + { + minor++; + patch = 0; + if (preReleaseNumber.HasValue) preReleaseNumber = 1; + } + break; + + case VersionField.Major: + if (hasPreReleaseTag && (mode == IncrementMode.Standard + || mode == IncrementMode.EnsureIntegrity && major != 0 && minor == 0 && patch == 0)) + { + preReleaseNumber++; + } + else + { + major++; + minor = 0; + patch = 0; + if (preReleaseNumber.HasValue) preReleaseNumber = 1; + } + break; + + default: + throw new ArgumentOutOfRangeException(nameof(increment)); + } + + SemanticVersion semanticVersion = new(major, minor, patch); + + bool foundAlternativeSemanticVersion = false; + foreach (var alternativeSemanticVersion in alternativeSemanticVersions) + { + if (semanticVersion.IsLessThan(alternativeSemanticVersion, includePreRelease: false)) + { + semanticVersion = alternativeSemanticVersion!; + foundAlternativeSemanticVersion = true; + } + } + + major = semanticVersion.Major; + minor = semanticVersion.Minor; + patch = semanticVersion.Patch; + + if (foundAlternativeSemanticVersion && increment == VersionField.None) + { + preReleaseNumber = 1; + } + + string preReleaseTagName; + if (hasPreReleaseTag) + { + preReleaseTagName = PreReleaseTag.Name; + } + else + { + preReleaseNumber = 1; + preReleaseTagName = string.Empty; + } + + if (label is not null && preReleaseTagName != label) + { + preReleaseNumber = 1; + preReleaseTagName = label; + } + + return new SemanticVersion(this) + { + Major = major, + Minor = minor, + Patch = patch, + PreReleaseTag = new SemanticVersionPreReleaseTag(preReleaseTagName, preReleaseNumber, true) + }; + } + + public enum IncrementMode + { + Standard, + + Force, + + EnsureIntegrity + } +} diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionBuildMetaData.cs b/src/GitVersion.Core/SemVer/SemanticVersionBuildMetaData.cs similarity index 61% rename from src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionBuildMetaData.cs rename to src/GitVersion.Core/SemVer/SemanticVersionBuildMetaData.cs index 895acb092c..734a0e2436 100644 --- a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionBuildMetaData.cs +++ b/src/GitVersion.Core/SemVer/SemanticVersionBuildMetaData.cs @@ -7,6 +7,8 @@ namespace GitVersion; public class SemanticVersionBuildMetaData : IFormattable, IEquatable { + public static readonly SemanticVersionBuildMetaData Empty = new(); + private static readonly Regex ParseRegex = new( @"(?\d+)?(\.?Branch(Name)?\.(?[^\.]+))?(\.?Sha?\.(?[^\.]+))?(?.*)", RegexOptions.Compiled | RegexOptions.IgnoreCase); @@ -14,21 +16,30 @@ public class SemanticVersionBuildMetaData : IFormattable, IEquatable EqualityHelper = new(x => x.CommitsSinceTag, x => x.Branch, x => x.Sha); - public long? CommitsSinceTag; - public string? Branch; - public string? Sha; - public string? ShortSha; - public string? OtherMetaData; - public DateTimeOffset? CommitDate; - public string? VersionSourceSha; - public long? CommitsSinceVersionSource; - public long UncommittedChanges; + public long? CommitsSinceTag { get; init; } + + public string? Branch { get; init; } + + public string? Sha { get; init; } + + public string? ShortSha { get; init; } + + public string? OtherMetaData { get; init; } + + public DateTimeOffset? CommitDate { get; init; } + + public string? VersionSourceSha { get; init; } + + public long CommitsSinceVersionSource { get; init; } + + public long UncommittedChanges { get; init; } public SemanticVersionBuildMetaData() { } - public SemanticVersionBuildMetaData(string? versionSourceSha, int? commitsSinceTag, string? branch, string? commitSha, string? commitShortSha, DateTimeOffset? commitDate, int numberOfUnCommittedChanges, string? otherMetadata = null) + public SemanticVersionBuildMetaData(string? versionSourceSha, long? commitsSinceTag, string? branch, string? commitSha, + string? commitShortSha, DateTimeOffset? commitDate, long numberOfUnCommittedChanges, string? otherMetadata = null) { this.Sha = commitSha; this.ShortSha = commitShortSha; @@ -41,20 +52,22 @@ public SemanticVersionBuildMetaData(string? versionSourceSha, int? commitsSinceT this.UncommittedChanges = numberOfUnCommittedChanges; } - public SemanticVersionBuildMetaData(SemanticVersionBuildMetaData? buildMetaData) + public SemanticVersionBuildMetaData(SemanticVersionBuildMetaData buildMetaData) { - this.Sha = buildMetaData?.Sha; - this.ShortSha = buildMetaData?.ShortSha; - this.CommitsSinceTag = buildMetaData?.CommitsSinceTag; - this.Branch = buildMetaData?.Branch; - this.CommitDate = buildMetaData?.CommitDate; - this.OtherMetaData = buildMetaData?.OtherMetaData; - this.VersionSourceSha = buildMetaData?.VersionSourceSha; - this.CommitsSinceVersionSource = buildMetaData?.CommitsSinceVersionSource; - this.UncommittedChanges = buildMetaData?.UncommittedChanges ?? 0; + buildMetaData.NotNull(); + + this.Sha = buildMetaData.Sha; + this.ShortSha = buildMetaData.ShortSha; + this.CommitsSinceTag = buildMetaData.CommitsSinceTag; + this.Branch = buildMetaData.Branch; + this.CommitDate = buildMetaData.CommitDate; + this.OtherMetaData = buildMetaData.OtherMetaData; + this.VersionSourceSha = buildMetaData.VersionSourceSha; + this.CommitsSinceVersionSource = buildMetaData.CommitsSinceVersionSource; + this.UncommittedChanges = buildMetaData.UncommittedChanges; } - public override bool Equals(object obj) => Equals(obj as SemanticVersionBuildMetaData); + public override bool Equals(object? obj) => Equals(obj as SemanticVersionBuildMetaData); public bool Equals(SemanticVersionBuildMetaData? other) => EqualityHelper.Equals(this, other); @@ -68,7 +81,6 @@ public SemanticVersionBuildMetaData(SemanticVersionBuildMetaData? buildMetaData) /// b - Formats just the build number /// s - Formats the build number and the Git Sha /// f - Formats the full build metadata - /// p - Formats the padded build number. Can specify an integer for padding, default is 4. (i.e., p5) /// public string ToString(string? format, IFormatProvider? formatProvider) { @@ -79,25 +91,9 @@ public string ToString(string? format, IFormatProvider? formatProvider) format = "b"; format = format.ToLower(); - if (format.StartsWith("p", StringComparison.Ordinal)) - { - // Handle format - var padding = 4; - if (format.Length > 1) - { - // try to parse - if (int.TryParse(format.Substring(1), out var p)) - { - padding = p; - } - } - - return this.CommitsSinceTag != null ? this.CommitsSinceTag.Value.ToString("D" + padding) : string.Empty; - } - return format.ToLower() switch { - "b" => this.CommitsSinceTag.ToString(), + "b" => $"{this.CommitsSinceTag}", "s" => $"{this.CommitsSinceTag}{(this.Sha.IsNullOrEmpty() ? null : ".Sha." + this.Sha)}".TrimStart('.'), "f" => $"{this.CommitsSinceTag}{(this.Branch.IsNullOrEmpty() ? null : ".Branch." + FormatMetaDataPart(this.Branch))}{(this.Sha.IsNullOrEmpty() ? null : ".Sha." + this.Sha)}{(this.OtherMetaData.IsNullOrEmpty() ? null : "." + FormatMetaDataPart(this.OtherMetaData))}".TrimStart('.'), _ => throw new FormatException($"Unknown format '{format}'.") @@ -116,28 +112,40 @@ public string ToString(string? format, IFormatProvider? formatProvider) public static SemanticVersionBuildMetaData Parse(string? buildMetaData) { - var semanticVersionBuildMetaData = new SemanticVersionBuildMetaData(); if (buildMetaData.IsNullOrEmpty()) - return semanticVersionBuildMetaData; + return Empty; var parsed = ParseRegex.Match(buildMetaData); + long? buildMetaDataCommitsSinceTag = null; + long? buildMetaDataCommitsSinceVersionSource = null; if (parsed.Groups["BuildNumber"].Success) { - semanticVersionBuildMetaData.CommitsSinceTag = long.Parse(parsed.Groups["BuildNumber"].Value); - semanticVersionBuildMetaData.CommitsSinceVersionSource = semanticVersionBuildMetaData.CommitsSinceTag ?? 0; + if (long.TryParse(parsed.Groups["BuildNumber"].Value, out var buildNumber)) + buildMetaDataCommitsSinceTag = buildNumber; + buildMetaDataCommitsSinceVersionSource = buildMetaDataCommitsSinceTag ?? 0; } + string? buildMetaDataBranch = null; if (parsed.Groups["BranchName"].Success) - semanticVersionBuildMetaData.Branch = parsed.Groups["BranchName"].Value; + buildMetaDataBranch = parsed.Groups["BranchName"].Value; + string? buildMetaDataSha = null; if (parsed.Groups["Sha"].Success) - semanticVersionBuildMetaData.Sha = parsed.Groups["Sha"].Value; + buildMetaDataSha = parsed.Groups["Sha"].Value; + string? buildMetaDataOtherMetaData = null; if (parsed.Groups["Other"].Success && !parsed.Groups["Other"].Value.IsNullOrEmpty()) - semanticVersionBuildMetaData.OtherMetaData = parsed.Groups["Other"].Value.TrimStart('.'); + buildMetaDataOtherMetaData = parsed.Groups["Other"].Value.TrimStart('.'); - return semanticVersionBuildMetaData; + return new() + { + CommitsSinceTag = buildMetaDataCommitsSinceTag, + CommitsSinceVersionSource = buildMetaDataCommitsSinceVersionSource ?? 0, + Branch = buildMetaDataBranch, + Sha = buildMetaDataSha, + OtherMetaData = buildMetaDataOtherMetaData + }; } private static string FormatMetaDataPart(string value) diff --git a/src/GitVersion.Core/SemVer/SemanticVersionFormat.cs b/src/GitVersion.Core/SemVer/SemanticVersionFormat.cs new file mode 100644 index 0000000000..ec228defde --- /dev/null +++ b/src/GitVersion.Core/SemVer/SemanticVersionFormat.cs @@ -0,0 +1,7 @@ +namespace GitVersion; + +public enum SemanticVersionFormat +{ + Strict, + Loose +} diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionPreReleaseTag.cs b/src/GitVersion.Core/SemVer/SemanticVersionPreReleaseTag.cs similarity index 57% rename from src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionPreReleaseTag.cs rename to src/GitVersion.Core/SemVer/SemanticVersionPreReleaseTag.cs index c9132d3fe3..cd26afde4e 100644 --- a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionPreReleaseTag.cs +++ b/src/GitVersion.Core/SemVer/SemanticVersionPreReleaseTag.cs @@ -5,32 +5,42 @@ namespace GitVersion; -public class SemanticVersionPreReleaseTag : +public sealed class SemanticVersionPreReleaseTag : IFormattable, IComparable, IEquatable { + private static readonly StringComparer IgnoreCaseComparer = StringComparer.InvariantCultureIgnoreCase; + public static readonly SemanticVersionPreReleaseTag Empty = new(); + + private static readonly Regex ParseRegex = new( + @"(?.*?)\.?(?\d+)?$", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + private static readonly LambdaEqualityHelper EqualityHelper = new(x => x.Name, x => x.Number); - public SemanticVersionPreReleaseTag() - { - } + public string Name { get; init; } + + public long? Number { get; init; } + + public bool PromoteTagEvenIfNameIsEmpty { get; init; } - public SemanticVersionPreReleaseTag(string? name, long? number) + public SemanticVersionPreReleaseTag() => Name = string.Empty; + + public SemanticVersionPreReleaseTag(string name, long? number, bool promoteTagEvenIfNameIsEmpty) { - Name = name; + Name = name.NotNull(); Number = number; + PromoteTagEvenIfNameIsEmpty = promoteTagEvenIfNameIsEmpty; } - public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag? preReleaseTag) + public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag preReleaseTag) { - Name = preReleaseTag?.Name; - Number = preReleaseTag?.Number; - PromotedFromCommits = preReleaseTag?.PromotedFromCommits; - } + preReleaseTag.NotNull(); - public string? Name { get; set; } - public long? Number { get; set; } - public bool? PromotedFromCommits { get; set; } + Name = preReleaseTag.Name; + Number = preReleaseTag.Number; + PromoteTagEvenIfNameIsEmpty = preReleaseTag.PromoteTagEvenIfNameIsEmpty; + } public override bool Equals(object? obj) => Equals(obj as SemanticVersionPreReleaseTag); @@ -54,7 +64,7 @@ public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag? preReleaseTag) left?.CompareTo(right) >= 0; public static bool operator <=(SemanticVersionPreReleaseTag? left, SemanticVersionPreReleaseTag? right) => - StringComparerUtils.IgnoreCaseComparer.Compare(left?.Name, right?.Name) != 1; + IgnoreCaseComparer.Compare(left?.Name, right?.Name) != 1; public static implicit operator string?(SemanticVersionPreReleaseTag? preReleaseTag) => preReleaseTag?.ToString(); @@ -62,24 +72,21 @@ public SemanticVersionPreReleaseTag(SemanticVersionPreReleaseTag? preReleaseTag) public static SemanticVersionPreReleaseTag Parse(string? preReleaseTag) { - if (preReleaseTag.IsNullOrEmpty()) - { - return new SemanticVersionPreReleaseTag(); - } + if (preReleaseTag.IsNullOrEmpty()) return Empty; - var match = Regex.Match(preReleaseTag, @"(?.*?)\.?(?\d+)?$"); + var match = ParseRegex.Match(preReleaseTag); if (!match.Success) { // TODO check how to log this Console.WriteLine($"Unable to successfully parse semver tag {preReleaseTag}"); - return new SemanticVersionPreReleaseTag(); + return Empty; } var value = match.Groups["name"].Value; var number = match.Groups["number"].Success ? long.Parse(match.Groups["number"].Value) : (long?)null; - return value.EndsWith("-") - ? new SemanticVersionPreReleaseTag(preReleaseTag, null) - : new SemanticVersionPreReleaseTag(value, number); + return value.EndsWith('-') + ? new SemanticVersionPreReleaseTag(preReleaseTag, null, true) + : new SemanticVersionPreReleaseTag(value, number, true); } public int CompareTo(SemanticVersionPreReleaseTag? other) @@ -93,7 +100,7 @@ public int CompareTo(SemanticVersionPreReleaseTag? other) return -1; } - var nameComparison = StringComparerUtils.IgnoreCaseComparer.Compare(Name, other?.Name); + var nameComparison = IgnoreCaseComparer.Compare(Name, other?.Name); return nameComparison != 0 ? nameComparison : Nullable.Compare(Number, other?.Number); } @@ -104,8 +111,6 @@ public int CompareTo(SemanticVersionPreReleaseTag? other) /// /// Default formats: /// t - SemVer 2.0 formatted tag [beta.1] - /// l - Legacy SemVer tag with the tag number padded. [beta1] - /// lp - Legacy SemVer tag with the tag number padded. [beta0001]. Can specify an integer to control padding (i.e., lp5) /// public string ToString(string? format, IFormatProvider? formatProvider) { @@ -116,49 +121,13 @@ public string ToString(string? format, IFormatProvider? formatProvider) format = "t"; format = format.ToLower(); - if (format.StartsWith("lp", StringComparison.Ordinal)) - { - // Handle format - var padding = 4; - if (format.Length > 2) - { - // try to parse - if (int.TryParse(format.Substring(2), out var p)) - { - padding = p; - } - } - - return Number.HasValue ? FormatLegacy(GetLegacyName(), Number.Value.ToString("D" + padding)) : FormatLegacy(GetLegacyName()); - } return format switch { - "t" => (Number.HasValue ? Name.IsNullOrEmpty() ? $"{Number}" : $"{Name}.{Number}" : Name ?? string.Empty), - "l" => (Number.HasValue ? FormatLegacy(GetLegacyName(), Number.Value.ToString()) : FormatLegacy(GetLegacyName())), + "t" => (Number.HasValue ? Name.IsNullOrEmpty() ? $"{Number}" : $"{Name}.{Number}" : Name), _ => throw new FormatException($"Unknown format '{format}'.") }; } - private static string FormatLegacy(string tag, string number = "") - { - var tagEndsWithANumber = char.IsNumber(tag.LastOrDefault()); - if (tagEndsWithANumber && number.Length > 0) - number = "-" + number; - - return tag.Length + number.Length > 20 ? $"{tag.Substring(0, 20 - number.Length)}{number}" : $"{tag}{number}"; - } - - private string GetLegacyName() - { - if (Name.IsNullOrEmpty()) - { - return string.Empty; - } - var firstPart = Name.Split('_')[0]; - return firstPart.Replace(".", string.Empty); - } - - public bool HasTag() => - !Name.IsNullOrEmpty() || (Number.HasValue && PromotedFromCommits != true); + public bool HasTag() => !Name.IsNullOrEmpty() || Number.HasValue && PromoteTagEvenIfNameIsEmpty; } diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/VersionField.cs b/src/GitVersion.Core/SemVer/VersionField.cs similarity index 100% rename from src/GitVersion.Core/VersionCalculation/SemanticVersioning/VersionField.cs rename to src/GitVersion.Core/SemVer/VersionField.cs diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IBaseVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IBaseVersionCalculator.cs deleted file mode 100644 index 7ed1497cd6..0000000000 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IBaseVersionCalculator.cs +++ /dev/null @@ -1,8 +0,0 @@ -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -public interface IBaseVersionCalculator -{ - (BaseVersion, EffectiveBranchConfiguration) GetBaseVersion(); -} diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IDeploymentModeCalculator.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IDeploymentModeCalculator.cs new file mode 100644 index 0000000000..28c6cec386 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IDeploymentModeCalculator.cs @@ -0,0 +1,8 @@ +using GitVersion.Git; + +namespace GitVersion.VersionCalculation; + +public interface IDeploymentModeCalculator +{ + SemanticVersion Calculate(SemanticVersion semanticVersion, ICommit? baseVersionSource); +} diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IEffectiveBranchConfigurationFinder.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IEffectiveBranchConfigurationFinder.cs new file mode 100644 index 0000000000..9f43497dbb --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IEffectiveBranchConfigurationFinder.cs @@ -0,0 +1,10 @@ +using GitVersion.Configuration; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation +{ + public interface IEffectiveBranchConfigurationFinder + { + IEnumerable GetConfigurations(IBranch branch, IGitVersionConfiguration configuration); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs index 5616a13286..5bd1ce41eb 100644 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IIncrementStrategyFinder.cs @@ -1,10 +1,19 @@ -using GitVersion.Model.Configuration; +using GitVersion.Configuration; +using GitVersion.Git; namespace GitVersion.VersionCalculation; public interface IIncrementStrategyFinder { - VersionField DetermineIncrementedField(GitVersionContext context, BaseVersion baseVersion, EffectiveConfiguration configuration); + VersionField DetermineIncrementedField( + ICommit currentCommit, ICommit? baseVersionSource, bool shouldIncrement, EffectiveConfiguration configuration, string? label); - VersionField? GetIncrementForCommits(Config configuration, IEnumerable commits); + VersionField? GetIncrementForCommits( + string? majorVersionBumpMessage, string? minorVersionBumpMessage, string? patchVersionBumpMessage, string? noBumpMessage, + ICommit[] commits + ); + + IEnumerable GetMergedCommits(ICommit mergeCommit, int index, IIgnoreConfiguration ignore); + + VersionField GetIncrementForcedByCommit(ICommit commit, IGitVersionConfiguration configuration); } diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IMainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IMainlineVersionCalculator.cs deleted file mode 100644 index 7c230aec39..0000000000 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IMainlineVersionCalculator.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace GitVersion.VersionCalculation; - -public interface IMainlineVersionCalculator -{ - SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion); - SemanticVersionBuildMetaData CreateVersionBuildMetaData(ICommit? baseVersionSource); -} diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/INextVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/INextVersionCalculator.cs index b1ee00577d..03bc8082db 100644 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/INextVersionCalculator.cs +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/INextVersionCalculator.cs @@ -2,5 +2,5 @@ namespace GitVersion.VersionCalculation; public interface INextVersionCalculator { - NextVersion FindVersion(); + SemanticVersion FindVersion(); } diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IVariableProvider.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IVariableProvider.cs index 05500e8e7f..cb848efc23 100644 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IVariableProvider.cs +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IVariableProvider.cs @@ -1,9 +1,10 @@ -using GitVersion.Model.Configuration; +using GitVersion.Configuration; using GitVersion.OutputVariables; namespace GitVersion.VersionCalculation; public interface IVariableProvider { - VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged); + GitVersionVariables GetVariablesFor( + SemanticVersion semanticVersion, IGitVersionConfiguration configuration, int preReleaseWeight); } diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionFilter.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionFilter.cs index f0b08c2216..f088734713 100644 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionFilter.cs +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionFilter.cs @@ -2,5 +2,5 @@ namespace GitVersion.VersionCalculation; public interface IVersionFilter { - bool Exclude(BaseVersion version, out string? reason); + bool Exclude(IBaseVersion baseVersion, out string? reason); } diff --git a/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionStrategy.cs index a3b27fbc10..1fcddaee17 100644 --- a/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/Abstractions/IVersionStrategy.cs @@ -1,14 +1,8 @@ -using GitVersion.Model.Configuration; +using GitVersion.Configuration; namespace GitVersion.VersionCalculation; public interface IVersionStrategy { - /// - /// Calculates the values. - /// - /// - /// An of the base version values found by the strategy. - /// IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration); } diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculator.cs deleted file mode 100644 index c7af4273c3..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculator.cs +++ /dev/null @@ -1,197 +0,0 @@ -using GitVersion.Common; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -public class BaseVersionCalculator : IBaseVersionCalculator -{ - private readonly ILog log; - private readonly IRepositoryStore repositoryStore; - private readonly IBranchConfigurationCalculator branchConfigurationCalculator; - private readonly IIncrementStrategyFinder incrementStrategyFinder; - private readonly IVersionStrategy[] strategies; - private readonly Lazy versionContext; - private GitVersionContext context => this.versionContext.Value; - - public BaseVersionCalculator(ILog log, IRepositoryStore repositoryStore, - IBranchConfigurationCalculator branchConfigurationCalculator, IIncrementStrategyFinder incrementStrategyFinder, Lazy versionContext, IEnumerable strategies) - { - this.log = log.NotNull(); - this.repositoryStore = repositoryStore.NotNull(); - this.branchConfigurationCalculator = branchConfigurationCalculator.NotNull(); - this.incrementStrategyFinder = incrementStrategyFinder.NotNull(); - this.strategies = strategies.ToArray(); - this.versionContext = versionContext.NotNull(); - } - - public (BaseVersion, EffectiveBranchConfiguration) GetBaseVersion() - { - using (this.log.IndentLog("Calculating base versions")) - { - if (this.context.CurrentBranch.Tip == null) - throw new GitVersionException("No commits found on the current branch."); - - var currentBranchConfig = this.branchConfigurationCalculator.GetBranchConfiguration( - targetBranch: this.context.CurrentBranch, - currentCommit: this.context.CurrentCommit, - configuration: this.context.FullConfiguration - ); - var effectiveConfiguration = new EffectiveConfiguration(this.context.FullConfiguration, currentBranchConfig); - var effectiveBranchConfiguration = new EffectiveBranchConfiguration(this.context.CurrentBranch, effectiveConfiguration); - - var allVersions = new List(); - foreach (var strategy in this.strategies) - { - var baseVersions = GetBaseVersions(strategy, effectiveBranchConfiguration).ToList(); - allVersions.AddRange(baseVersions); - } - - var versions = allVersions - .Select(baseVersion => new Versions { IncrementedVersion = MaybeIncrement(baseVersion, effectiveConfiguration), Version = baseVersion }) - .ToList(); - - FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(versions); - - if (context.FullConfiguration.VersioningMode == VersioningMode.Mainline) - { - versions = versions - .Where(b => b.IncrementedVersion.PreReleaseTag?.HasTag() != true) - .ToList(); - } - - var maxVersion = versions.Aggregate((v1, v2) => v1.IncrementedVersion > v2.IncrementedVersion ? v1 : v2); - var matchingVersionsOnceIncremented = versions - .Where(b => b.Version.BaseVersionSource != null && b.IncrementedVersion == maxVersion.IncrementedVersion) - .ToList(); - BaseVersion baseVersionWithOldestSource; - - if (matchingVersionsOnceIncremented.Any()) - { - static Versions CompareVersions(Versions versions1, Versions version2) - { - if (versions1.Version.BaseVersionSource == null) - { - return version2; - } - if (version2.Version.BaseVersionSource == null) - { - return versions1; - } - - return versions1.Version.BaseVersionSource.When < version2.Version.BaseVersionSource.When ? versions1 : version2; - } - - var oldest = matchingVersionsOnceIncremented.Aggregate(CompareVersions); - baseVersionWithOldestSource = oldest.Version; - maxVersion = oldest; - this.log.Info($"Found multiple base versions which will produce the same SemVer ({maxVersion.IncrementedVersion}), taking oldest source for commit counting ({baseVersionWithOldestSource.Source})"); - } - else - { - baseVersionWithOldestSource = versions - .Where(v => v.Version.BaseVersionSource != null) - .OrderByDescending(v => v.IncrementedVersion) - .ThenByDescending(v => v.Version.BaseVersionSource?.When) - .First() - .Version; - } - - if (baseVersionWithOldestSource.BaseVersionSource == null) - throw new Exception("Base version should not be null"); - - var calculatedBase = new BaseVersion( - maxVersion.Version.Source, - maxVersion.Version.ShouldIncrement, - maxVersion.Version.SemanticVersion, - baseVersionWithOldestSource.BaseVersionSource, - maxVersion.Version.BranchNameOverride); - - this.log.Info($"Base version used: {calculatedBase}"); - - return new(calculatedBase, effectiveBranchConfiguration); - } - } - - private SemanticVersion MaybeIncrement(BaseVersion baseVersion, EffectiveConfiguration configuration) - { - var incrementStrategy = this.incrementStrategyFinder.DetermineIncrementedField( - context: context, - baseVersion: baseVersion, - configuration: configuration - ); - return incrementStrategy == VersionField.None - ? baseVersion.SemanticVersion - : baseVersion.SemanticVersion.IncrementVersion(incrementStrategy); - } - - private IEnumerable GetBaseVersions(IVersionStrategy strategy, EffectiveBranchConfiguration configuration) - { - foreach (var version in strategy.GetBaseVersions(configuration)) - { - if (version == null) continue; - - this.log.Info(version.ToString()); - if (strategy is FallbackVersionStrategy || IncludeVersion(version)) - { - yield return version; - } - } - } - private bool IncludeVersion(BaseVersion version) - { - foreach (var filter in context.FullConfiguration.Ignore.ToFilters()) - { - if (filter.Exclude(version, out var reason)) - { - if (reason != null) - { - this.log.Info(reason); - } - return false; - } - } - return true; - } - - private void FixTheBaseVersionSourceOfMergeMessageStrategyIfReleaseBranchWasMergedAndDeleted(IEnumerable baseVersions) - { - if (ReleaseBranchExistsInRepo()) return; - - foreach (var baseVersion in baseVersions) - { - if (baseVersion.Version.Source.Contains(MergeMessageVersionStrategy.MergeMessageStrategyPrefix) - && baseVersion.Version.Source.Contains("Merge branch") - && baseVersion.Version.Source.Contains("release")) - { - if (baseVersion.Version.BaseVersionSource != null) - { - var parents = baseVersion.Version.BaseVersionSource.Parents.ToList(); - baseVersion.Version = new BaseVersion( - baseVersion.Version.Source, - baseVersion.Version.ShouldIncrement, - baseVersion.Version.SemanticVersion, - this.repositoryStore.FindMergeBase(parents[0], parents[1]), - baseVersion.Version.BranchNameOverride); - } - } - } - } - - private bool ReleaseBranchExistsInRepo() - { - var releaseBranchConfig = context.FullConfiguration.GetReleaseBranchConfig(); - var releaseBranches = this.repositoryStore.GetReleaseBranches(releaseBranchConfig); - return releaseBranches.Any(); - } - - private class Versions - { - public SemanticVersion IncrementedVersion { get; set; } - public BaseVersion Version { get; set; } - - public override string ToString() => $"{Version} | {IncrementedVersion}"; - } -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/BaseVersion.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/BaseVersion.cs deleted file mode 100644 index 2c9cfabe3b..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/BaseVersion.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace GitVersion.VersionCalculation; - -public class BaseVersion -{ - public BaseVersion(string source, bool shouldIncrement, SemanticVersion semanticVersion, ICommit? baseVersionSource, string? branchNameOverride) - { - Source = source; - ShouldIncrement = shouldIncrement; - SemanticVersion = semanticVersion; - BaseVersionSource = baseVersionSource; - BranchNameOverride = branchNameOverride; - } - - public string Source { get; } - - public bool ShouldIncrement { get; } - - public SemanticVersion SemanticVersion { get; } - - public ICommit? BaseVersionSource { get; } - - public string? BranchNameOverride { get; } - - public override string ToString() - { - var externalSource = BaseVersionSource == null ? "External Source" : BaseVersionSource.Sha; - return $"{Source}: {SemanticVersion.ToString("f")} with commit count source {externalSource}"; - } -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/ConfigNextVersionVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/ConfigNextVersionVersionStrategy.cs deleted file mode 100644 index f0945ecb35..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/ConfigNextVersionVersionStrategy.cs +++ /dev/null @@ -1,26 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -/// -/// Version is from NextVersion (the configuration value), unless the current commit is tagged. -/// BaseVersionSource is null. -/// Does not increment. -/// -public class ConfigNextVersionVersionStrategy : VersionStrategyBase -{ - public ConfigNextVersionVersionStrategy(Lazy versionContext) : base(versionContext) - { - } - - public override IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) - { - var nextVersion = Context.FullConfiguration.NextVersion; - if (!nextVersion.IsNullOrEmpty() && !Context.IsCurrentCommitTagged) - { - var semanticVersion = SemanticVersion.Parse(nextVersion, Context.FullConfiguration.TagPrefix); - yield return new BaseVersion("NextVersion in GitVersion configuration file", false, semanticVersion, null, null); - } - } -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/FallbackVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/FallbackVersionStrategy.cs deleted file mode 100644 index e1e7f5ad46..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/FallbackVersionStrategy.cs +++ /dev/null @@ -1,29 +0,0 @@ -using GitVersion.Common; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -/// -/// Version is 0.1.0. -/// BaseVersionSource is the "root" commit reachable from the current commit. -/// Does not increment. -/// -public class FallbackVersionStrategy : VersionStrategyBase -{ - private readonly IRepositoryStore repositoryStore; - - public FallbackVersionStrategy(IRepositoryStore repositoryStore, Lazy versionContext) : base(versionContext) => this.repositoryStore = repositoryStore; - - public override IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) - { - var currentBranchTip = Context.CurrentBranch.Tip; - if (currentBranchTip == null) - { - throw new GitVersionException("No commits found on the current branch."); - } - - var baseVersionSource = this.repositoryStore.GetBaseVersionSource(currentBranchTip); - - yield return new BaseVersion("Fallback base version", false, new SemanticVersion(minor: 1), baseVersionSource, null); - } -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs deleted file mode 100644 index 12ae7565eb..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/MergeMessageVersionStrategy.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Text.RegularExpressions; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -/// -/// Version is extracted from older commits' merge messages. -/// BaseVersionSource is the commit where the message was found. -/// Increments if PreventIncrementOfMergedBranchVersion (from the branch config) is false. -/// -public class MergeMessageVersionStrategy : VersionStrategyBase -{ - private readonly ILog log; - - public MergeMessageVersionStrategy(ILog log, Lazy versionContext) - : base(versionContext) => this.log = log.NotNull(); - - public override IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) - { - if (Context.CurrentBranch.Commits == null || Context.CurrentCommit == null) - return Enumerable.Empty(); - - var commitsPriorToThan = Context.CurrentBranch.Commits.GetCommitsPriorTo(Context.CurrentCommit.When); - var baseVersions = commitsPriorToThan - .SelectMany(c => - { - if (TryParse(c, Context, out var mergeMessage) && - mergeMessage.Version != null && - Context.FullConfiguration.IsReleaseBranch(TrimRemote(mergeMessage.MergedBranch))) - { - this.log.Info($"Found commit [{Context.CurrentCommit}] matching merge message format: {mergeMessage.FormatName}"); - var shouldIncrement = !configuration.Value.PreventIncrementOfMergedBranchVersion; - return new[] - { - new BaseVersion($"{MergeMessageStrategyPrefix} '{c.Message.Trim()}'", shouldIncrement, mergeMessage.Version, c, null) - }; - } - return Enumerable.Empty(); - }) - .Take(5) - .ToList(); - return baseVersions; - } - - public const string MergeMessageStrategyPrefix = "Merge message"; - - private static bool TryParse(ICommit mergeCommit, GitVersionContext context, [NotNullWhen(true)] out MergeMessage? mergeMessage) - { - mergeMessage = Inner(mergeCommit, context); - return mergeMessage != null; - } - - private static MergeMessage? Inner(ICommit mergeCommit, GitVersionContext context) - { - if (mergeCommit.Parents.Count() < 2) - { - return null; - } - - var mergeMessage = new MergeMessage(mergeCommit.Message, context.FullConfiguration); - return mergeMessage; - } - - private static string TrimRemote(string branchName) => branchName - .RegexReplace("^refs/remotes/", string.Empty, RegexOptions.IgnoreCase) - .RegexReplace("^origin/", string.Empty, RegexOptions.IgnoreCase); -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs deleted file mode 100644 index 9157b4a2a8..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TaggedCommitVersionStrategy.cs +++ /dev/null @@ -1,63 +0,0 @@ -using GitVersion.Common; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -/// -/// Version is extracted from all tags on the branch which are valid, and not newer than the current commit. -/// BaseVersionSource is the tag's commit. -/// Increments if the tag is not the current commit. -/// -public class TaggedCommitVersionStrategy : VersionStrategyBase -{ - private readonly IRepositoryStore repositoryStore; - - public TaggedCommitVersionStrategy(IRepositoryStore repositoryStore, Lazy versionContext) - : base(versionContext) => this.repositoryStore = repositoryStore.NotNull(); - - public override IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) => - GetTaggedVersions(Context.CurrentBranch, Context.CurrentCommit?.When); - - internal IEnumerable GetTaggedVersions(IBranch currentBranch, DateTimeOffset? olderThan) - { - if (currentBranch is null) - return Enumerable.Empty(); - var versionTags = this.repositoryStore.GetValidVersionTags(Context.FullConfiguration.TagPrefix, olderThan); - var versionTagsByCommit = versionTags.ToLookup(vt => vt.Item3.Id.Sha); - var commitsOnBranch = currentBranch.Commits; - if (commitsOnBranch == null) - return Enumerable.Empty(); - - var versionTagsOnBranch = commitsOnBranch.SelectMany(commit => versionTagsByCommit[commit.Id.Sha]); - var versionTaggedCommits = versionTagsOnBranch.Select(t => new VersionTaggedCommit(t.Item3, t.Item2, t.Item1.Name.Friendly)); - var taggedVersions = versionTaggedCommits.Select(versionTaggedCommit => CreateBaseVersion(Context, versionTaggedCommit)).ToList(); - var taggedVersionsOnCurrentCommit = taggedVersions.Where(version => !version.ShouldIncrement).ToList(); - return taggedVersionsOnCurrentCommit.Any() ? taggedVersionsOnCurrentCommit : taggedVersions; - } - - private BaseVersion CreateBaseVersion(GitVersionContext context, VersionTaggedCommit version) - { - var shouldUpdateVersion = version.Commit.Sha != context.CurrentCommit?.Sha; - var baseVersion = new BaseVersion(FormatSource(version), shouldUpdateVersion, version.SemVer, version.Commit, null); - return baseVersion; - } - - protected virtual string FormatSource(VersionTaggedCommit version) => $"Git tag '{version.Tag}'"; - - protected class VersionTaggedCommit - { - public string Tag; - public ICommit Commit; - public SemanticVersion SemVer; - - public VersionTaggedCommit(ICommit commit, SemanticVersion semVer, string tag) - { - this.Tag = tag; - this.Commit = commit; - this.SemVer = semVer; - } - - public override string ToString() => $"{this.Tag} | {this.Commit} | {this.SemVer}"; - } -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TrackReleaseBranchesVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TrackReleaseBranchesVersionStrategy.cs deleted file mode 100644 index 2053c2aaa8..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/TrackReleaseBranchesVersionStrategy.cs +++ /dev/null @@ -1,91 +0,0 @@ -using GitVersion.Common; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -/// -/// Active only when the branch is marked as IsDevelop. -/// Two different algorithms (results are merged): -/// -/// Using : -/// Version is that of any child branches marked with IsReleaseBranch (except if they have no commits of their own). -/// BaseVersionSource is the commit where the child branch was created. -/// Always increments. -/// -/// -/// Using : -/// Version is extracted from all tags on the main branch which are valid. -/// BaseVersionSource is the tag's commit (same as base strategy). -/// Increments if the tag is not the current commit (same as base strategy). -/// -/// -public class TrackReleaseBranchesVersionStrategy : VersionStrategyBase -{ - private readonly VersionInBranchNameVersionStrategy releaseVersionStrategy; - private readonly TaggedCommitVersionStrategy taggedCommitVersionStrategy; - - private readonly IRepositoryStore repositoryStore; - - public TrackReleaseBranchesVersionStrategy(IRepositoryStore repositoryStore, Lazy versionContext) - : base(versionContext) - { - this.repositoryStore = repositoryStore.NotNull(); - this.releaseVersionStrategy = new VersionInBranchNameVersionStrategy(repositoryStore, versionContext); - this.taggedCommitVersionStrategy = new TaggedCommitVersionStrategy(repositoryStore, versionContext); - } - - public override IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) => - configuration.Value.TracksReleaseBranches ? ReleaseBranchBaseVersions().Union(MainTagsVersions()) : Array.Empty(); - - private IEnumerable MainTagsVersions() - { - var configuration = Context.FullConfiguration; - var mainBranch = this.repositoryStore.FindMainBranch(configuration); - - return mainBranch != null - ? this.taggedCommitVersionStrategy.GetTaggedVersions(mainBranch, null) - : Array.Empty(); - } - - private IEnumerable ReleaseBranchBaseVersions() - { - var releaseBranchConfig = Context.FullConfiguration.GetReleaseBranchConfig(); - if (!releaseBranchConfig.Any()) - return Array.Empty(); - - var releaseBranches = this.repositoryStore.GetReleaseBranches(releaseBranchConfig); - - return releaseBranches - .SelectMany(b => GetReleaseVersion(b)) - .Select(baseVersion => - { - // Need to drop branch overrides and give a bit more context about - // where this version came from - var source1 = "Release branch exists -> " + baseVersion.Source; - return new BaseVersion(source1, - baseVersion.ShouldIncrement, - baseVersion.SemanticVersion, - baseVersion.BaseVersionSource, - null); - }) - .ToList(); - } - - private IEnumerable GetReleaseVersion(IBranch releaseBranch) - { - // Find the commit where the child branch was created. - var baseSource = this.repositoryStore.FindMergeBase(releaseBranch, Context.CurrentBranch); - if (Equals(baseSource, Context.CurrentCommit)) - { - // Ignore the branch if it has no commits. - return Array.Empty(); - } - - var configuration = Context.GetEffectiveConfiguration(releaseBranch); - return this.releaseVersionStrategy - .GetBaseVersions(new(releaseBranch, configuration)) - .Select(b => new BaseVersion(b.Source, true, b.SemanticVersion, baseSource, b.BranchNameOverride)); - } -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs deleted file mode 100644 index 85fb716945..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionInBranchNameVersionStrategy.cs +++ /dev/null @@ -1,52 +0,0 @@ -using GitVersion.Common; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -/// -/// Version is extracted from the name of the branch. -/// BaseVersionSource is the commit where the branch was branched from its parent. -/// Does not increment. -/// -public class VersionInBranchNameVersionStrategy : VersionStrategyBase -{ - private readonly IRepositoryStore repositoryStore; - - public VersionInBranchNameVersionStrategy(IRepositoryStore repositoryStore, Lazy versionContext) - : base(versionContext) => this.repositoryStore = repositoryStore.NotNull(); - - public override IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) - { - string nameWithoutOrigin = NameWithoutOrigin(configuration.Branch); - if (Context.FullConfiguration.IsReleaseBranch(nameWithoutOrigin)) - { - var versionInBranch = GetVersionInBranch(configuration.Branch.Name.Friendly, Context.FullConfiguration.TagPrefix); - if (versionInBranch != null) - { - var commitBranchWasBranchedFrom = this.repositoryStore.FindCommitBranchWasBranchedFrom(configuration.Branch, Context.FullConfiguration); - var branchNameOverride = Context.CurrentBranch.Name.Friendly.RegexReplace("[-/]" + versionInBranch.Item1, string.Empty); - yield return new BaseVersion("Version in branch name", false, versionInBranch.Item2, commitBranchWasBranchedFrom.Commit, branchNameOverride); - } - } - } - - private static Tuple? GetVersionInBranch(string branchName, string? tagPrefixRegex) - { - var branchParts = branchName.Split('/', '-'); - foreach (var part in branchParts) - { - if (SemanticVersion.TryParse(part, tagPrefixRegex, out var semanticVersion)) - { - return Tuple.Create(part, semanticVersion); - } - } - - return null; - } - - private static string NameWithoutOrigin(IBranch branch) => branch.IsRemote && branch.Name.Friendly.StartsWith("origin/") - ? branch.Name.Friendly.Substring("origin/".Length) - : branch.Name.Friendly; -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionStrategyBase.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionStrategyBase.cs deleted file mode 100644 index 8161fdb518..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionStrategyBase.cs +++ /dev/null @@ -1,15 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -public abstract class VersionStrategyBase : IVersionStrategy -{ - private readonly Lazy versionContext; - - protected GitVersionContext Context => this.versionContext.Value; - - protected VersionStrategyBase(Lazy versionContext) => this.versionContext = versionContext.NotNull(); - - public abstract IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration); -} diff --git a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionStrategyModule.cs b/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionStrategyModule.cs deleted file mode 100644 index aa5b8a6d26..0000000000 --- a/src/GitVersion.Core/VersionCalculation/BaseVersionCalculators/VersionStrategyModule.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion.VersionCalculation; - -public class VersionStrategyModule : GitVersionModule -{ - public override void RegisterTypes(IServiceCollection services) - { - var versionStrategies = FindAllDerivedTypes(Assembly.GetAssembly(GetType())) - .Where(x => !x.IsAbstract && !x.IsInterface); - - foreach (var versionStrategy in versionStrategies) - { - services.AddSingleton(typeof(IVersionStrategy), versionStrategy); - } - } -} diff --git a/src/GitVersion.Core/VersionCalculation/Cache/GitVersionCache.cs b/src/GitVersion.Core/VersionCalculation/Cache/GitVersionCache.cs deleted file mode 100644 index 598da5bb65..0000000000 --- a/src/GitVersion.Core/VersionCalculation/Cache/GitVersionCache.cs +++ /dev/null @@ -1,107 +0,0 @@ -using GitVersion.Cache; -using GitVersion.Extensions; -using GitVersion.Helpers; -using GitVersion.Logging; -using GitVersion.OutputVariables; -using YamlDotNet.Serialization; - -namespace GitVersion.VersionCalculation.Cache; - -public class GitVersionCache : IGitVersionCache -{ - private readonly IFileSystem fileSystem; - private readonly ILog log; - private readonly IGitRepositoryInfo repositoryInfo; - - public GitVersionCache(IFileSystem fileSystem, ILog log, IGitRepositoryInfo repositoryInfo) - { - this.fileSystem = fileSystem.NotNull(); - this.log = log.NotNull(); - this.repositoryInfo = repositoryInfo.NotNull(); - } - - public void WriteVariablesToDiskCache(GitVersionCacheKey cacheKey, VersionVariables variablesFromCache) - { - var cacheDir = PrepareCacheDirectory(); - var cacheFileName = GetCacheFileName(cacheKey, cacheDir); - - variablesFromCache.FileName = cacheFileName; - - Dictionary dictionary; - using (this.log.IndentLog("Creating dictionary")) - { - dictionary = variablesFromCache.ToDictionary(x => x.Key, x => x.Value); - } - - void WriteCacheOperation() - { - using var stream = this.fileSystem.OpenWrite(cacheFileName); - using var sw = new StreamWriter(stream); - using (this.log.IndentLog("Storing version variables to cache file " + cacheFileName)) - { - var serializer = new Serializer(); - serializer.Serialize(sw, dictionary); - } - } - - var retryOperation = new RetryAction(6); - retryOperation.Execute(WriteCacheOperation); - } - - public string GetCacheDirectory() - { - var gitDir = this.repositoryInfo.DotGitDirectory; - return PathHelper.Combine(gitDir, "gitversion_cache"); - } - - public VersionVariables? LoadVersionVariablesFromDiskCache(GitVersionCacheKey key) - { - using (this.log.IndentLog("Loading version variables from disk cache")) - { - var cacheDir = PrepareCacheDirectory(); - - var cacheFileName = GetCacheFileName(key, cacheDir); - if (!this.fileSystem.Exists(cacheFileName)) - { - this.log.Info("Cache file " + cacheFileName + " not found."); - return null; - } - - using (this.log.IndentLog("Deserializing version variables from cache file " + cacheFileName)) - { - try - { - var loadedVariables = VersionVariables.FromFile(cacheFileName, this.fileSystem); - return loadedVariables; - } - catch (Exception ex) - { - this.log.Warning("Unable to read cache file " + cacheFileName + ", deleting it."); - this.log.Info(ex.ToString()); - try - { - this.fileSystem.Delete(cacheFileName); - } - catch (Exception deleteEx) - { - this.log.Warning($"Unable to delete corrupted version cache file {cacheFileName}. Got {deleteEx.GetType().FullName} exception."); - } - - return null; - } - } - } - } - - private string PrepareCacheDirectory() - { - var cacheDir = GetCacheDirectory(); - - // If the cacheDir already exists, CreateDirectory just won't do anything (it won't fail). @asbjornu - this.fileSystem.CreateDirectory(cacheDir); - - return cacheDir; - } - - private static string GetCacheFileName(GitVersionCacheKey key, string cacheDir) => PathHelper.Combine(cacheDir, string.Concat(key.Value, ".yml")); -} diff --git a/src/GitVersion.Core/VersionCalculation/Cache/IGitVersionCache.cs b/src/GitVersion.Core/VersionCalculation/Cache/IGitVersionCache.cs deleted file mode 100644 index 33e275f90f..0000000000 --- a/src/GitVersion.Core/VersionCalculation/Cache/IGitVersionCache.cs +++ /dev/null @@ -1,11 +0,0 @@ -using GitVersion.Cache; -using GitVersion.OutputVariables; - -namespace GitVersion.VersionCalculation.Cache; - -public interface IGitVersionCache -{ - void WriteVariablesToDiskCache(GitVersionCacheKey cacheKey, VersionVariables variablesFromCache); - string GetCacheDirectory(); - VersionVariables? LoadVersionVariablesFromDiskCache(GitVersionCacheKey key); -} diff --git a/src/GitVersion.Core/VersionCalculation/Cache/IGitVersionCacheKeyFactory.cs b/src/GitVersion.Core/VersionCalculation/Cache/IGitVersionCacheKeyFactory.cs deleted file mode 100644 index 812676962d..0000000000 --- a/src/GitVersion.Core/VersionCalculation/Cache/IGitVersionCacheKeyFactory.cs +++ /dev/null @@ -1,9 +0,0 @@ -using GitVersion.Cache; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation.Cache; - -public interface IGitVersionCacheKeyFactory -{ - GitVersionCacheKey Create(Config? overrideConfig); -} diff --git a/src/GitVersion.Core/VersionCalculation/Cache/GitVersionCacheKeyFactory.cs b/src/GitVersion.Core/VersionCalculation/Caching/GitVersionCacheKeyFactory.cs similarity index 71% rename from src/GitVersion.Core/VersionCalculation/Cache/GitVersionCacheKeyFactory.cs rename to src/GitVersion.Core/VersionCalculation/Caching/GitVersionCacheKeyFactory.cs index cf07e84f73..429071f0bd 100644 --- a/src/GitVersion.Core/VersionCalculation/Cache/GitVersionCacheKeyFactory.cs +++ b/src/GitVersion.Core/VersionCalculation/Caching/GitVersionCacheKeyFactory.cs @@ -1,44 +1,40 @@ using System.Security.Cryptography; -using GitVersion.Cache; using GitVersion.Configuration; using GitVersion.Extensions; +using GitVersion.Git; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model.Configuration; using Microsoft.Extensions.Options; -namespace GitVersion.VersionCalculation.Cache; - -public class GitVersionCacheKeyFactory : IGitVersionCacheKeyFactory +namespace GitVersion.VersionCalculation.Caching; + +internal class GitVersionCacheKeyFactory( + IFileSystem fileSystem, + ILog log, + IOptions options, + IConfigurationFileLocator configFileLocator, + IConfigurationSerializer configurationSerializer, + IGitRepository gitRepository, + IGitRepositoryInfo repositoryInfo) + : IGitVersionCacheKeyFactory { - private readonly IFileSystem fileSystem; - private readonly ILog log; - private readonly IOptions options; - private readonly IConfigFileLocator configFileLocator; - private readonly IGitRepository gitRepository; - private readonly IGitRepositoryInfo repositoryInfo; - - public GitVersionCacheKeyFactory(IFileSystem fileSystem, ILog log, - IOptions options, IConfigFileLocator configFileLocator, - IGitRepository gitRepository, IGitRepositoryInfo repositoryInfo) - { - this.fileSystem = fileSystem.NotNull(); - this.log = log.NotNull(); - this.options = options.NotNull(); - this.configFileLocator = configFileLocator.NotNull(); - this.gitRepository = gitRepository.NotNull(); - this.repositoryInfo = repositoryInfo.NotNull(); - } - - public GitVersionCacheKey Create(Config? overrideConfig) + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly ILog log = log.NotNull(); + private readonly IOptions options = options.NotNull(); + private readonly IConfigurationFileLocator configFileLocator = configFileLocator.NotNull(); + private readonly IConfigurationSerializer configurationSerializer = configurationSerializer.NotNull(); + private readonly IGitRepository gitRepository = gitRepository.NotNull(); + private readonly IGitRepositoryInfo repositoryInfo = repositoryInfo.NotNull(); + + public GitVersionCacheKey Create(IReadOnlyDictionary? overrideConfiguration) { var gitSystemHash = GetGitSystemHash(); var configFileHash = GetConfigFileHash(); var repositorySnapshotHash = GetRepositorySnapshotHash(); - var overrideConfigHash = GetOverrideConfigHash(overrideConfig); + var overrideConfigHash = GetOverrideConfigHash(overrideConfiguration); var compositeHash = GetHash(gitSystemHash, configFileHash, repositorySnapshotHash, overrideConfigHash); - return new GitVersionCacheKey(compositeHash); + return new(compositeHash); } private string GetGitSystemHash() @@ -67,7 +63,7 @@ private List CalculateDirectoryContents(string root) dirs.Push(root); - while (dirs.Any()) + while (dirs.Count != 0) { var currentDir = dirs.Pop(); @@ -148,39 +144,36 @@ private string GetRepositorySnapshotHash() { return head.Name.Canonical; } + var hash = string.Join(":", head.Name.Canonical, head.Tip.Sha); return GetHash(hash); } - private static string GetOverrideConfigHash(Config? overrideConfig) + private string GetOverrideConfigHash(IReadOnlyDictionary? overrideConfiguration) { - if (overrideConfig == null) + if (overrideConfiguration?.Any() != true) { return string.Empty; } // Doesn't depend on command line representation and // includes possible changes in default values of Config per se. - var stringBuilder = new StringBuilder(); - using (var stream = new StringWriter(stringBuilder)) - { - ConfigSerializer.Write(overrideConfig, stream); - stream.Flush(); - } - var configContent = stringBuilder.ToString(); + var configContent = configurationSerializer.Serialize(overrideConfiguration); return GetHash(configContent); } private string GetConfigFileHash() { - // will return the same hash even when config file will be moved - // from workingDirectory to rootProjectDirectory. It's OK. Config essentially is the same. - var configFilePath = this.configFileLocator.SelectConfigFilePath(this.options.Value, this.repositoryInfo); - if (configFilePath == null || !this.fileSystem.Exists(configFilePath)) - { - return string.Empty; - } + // will return the same hash even when configuration file will be moved + // from workingDirectory to rootProjectDirectory. It's OK. Configuration essentially is the same. + var workingDirectory = this.options.Value.WorkingDirectory; + var projectRootDirectory = this.repositoryInfo.ProjectRootDirectory; + + var configFilePath = this.configFileLocator.GetConfigurationFile(workingDirectory) + ?? this.configFileLocator.GetConfigurationFile(projectRootDirectory); + if (configFilePath == null) return string.Empty; + if (!this.fileSystem.Exists(configFilePath)) return string.Empty; var configFileContent = this.fileSystem.ReadAllText(configFilePath); return GetHash(configFileContent); @@ -199,9 +192,8 @@ private static string GetHash(string textToHash) return string.Empty; } - using var sha1 = SHA1.Create(); var bytes = Encoding.UTF8.GetBytes(textToHash); - var hashedBytes = sha1.ComputeHash(bytes); + var hashedBytes = SHA1.HashData(bytes); var hashedString = BitConverter.ToString(hashedBytes); return hashedString.Replace("-", ""); } diff --git a/src/GitVersion.Core/VersionCalculation/Caching/GitVersionCacheProvider.cs b/src/GitVersion.Core/VersionCalculation/Caching/GitVersionCacheProvider.cs new file mode 100644 index 0000000000..63a67e6afb --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Caching/GitVersionCacheProvider.cs @@ -0,0 +1,107 @@ +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Helpers; +using GitVersion.Logging; +using GitVersion.OutputVariables; +using Microsoft.Extensions.Options; + +namespace GitVersion.VersionCalculation.Caching; + +internal class GitVersionCacheProvider( + IFileSystem fileSystem, + ILog log, + IOptions options, + IVersionVariableSerializer serializer, + IGitVersionCacheKeyFactory cacheKeyFactory, + IGitRepositoryInfo repositoryInfo) + : IGitVersionCacheProvider +{ + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly ILog log = log.NotNull(); + private readonly IOptions options = options.NotNull(); + private readonly IVersionVariableSerializer serializer = serializer.NotNull(); + private readonly IGitVersionCacheKeyFactory cacheKeyFactory = cacheKeyFactory.NotNull(); + private readonly IGitRepositoryInfo repositoryInfo = repositoryInfo.NotNull(); + + public void WriteVariablesToDiskCache(GitVersionVariables versionVariables) + { + var cacheKey = GetCacheKey(); + var cacheFileName = GetCacheFileName(cacheKey); + using (this.log.IndentLog($"Write version variables to cache file {cacheFileName}")) + { + try + { + serializer.ToFile(versionVariables, cacheFileName); + } + catch (Exception ex) + { + this.log.Error($"Unable to write cache file {cacheFileName}. Got {ex.GetType().FullName} exception."); + } + } + } + + public GitVersionVariables? LoadVersionVariablesFromDiskCache() + { + var cacheKey = GetCacheKey(); + var cacheFileName = GetCacheFileName(cacheKey); + using (this.log.IndentLog($"Loading version variables from disk cache file {cacheFileName}")) + { + if (!this.fileSystem.Exists(cacheFileName)) + { + this.log.Info($"Cache file {cacheFileName} not found."); + return null; + } + + try + { + var loadedVariables = serializer.FromFile(cacheFileName); + return loadedVariables; + } + catch (Exception ex) + { + this.log.Warning($"Unable to read cache file {cacheFileName}, deleting it."); + this.log.Info(ex.ToString()); + try + { + this.fileSystem.Delete(cacheFileName); + } + catch (Exception deleteEx) + { + this.log.Warning($"Unable to delete corrupted version cache file {cacheFileName}. Got {deleteEx.GetType().FullName} exception."); + } + + return null; + } + } + } + + internal string GetCacheFileName(GitVersionCacheKey cacheKey) + { + var cacheDir = PrepareCacheDirectory(); + return GetCacheFileName(cacheKey, cacheDir); + } + + internal string GetCacheDirectory() + { + var gitDir = this.repositoryInfo.DotGitDirectory; + return PathHelper.Combine(gitDir, "gitversion_cache"); + } + + private string PrepareCacheDirectory() + { + var cacheDir = GetCacheDirectory(); + + // If the cacheDir already exists, CreateDirectory just won't do anything (it won't fail). @asbjornu + this.fileSystem.CreateDirectory(cacheDir); + + return cacheDir; + } + + private GitVersionCacheKey GetCacheKey() + { + var cacheKey = this.cacheKeyFactory.Create(options.Value.ConfigurationInfo.OverrideConfiguration); + return cacheKey; + } + + private static string GetCacheFileName(GitVersionCacheKey key, string cacheDir) => PathHelper.Combine(cacheDir, key.Value); +} diff --git a/src/GitVersion.Core/VersionCalculation/Caching/IGitVersionCacheKeyFactory.cs b/src/GitVersion.Core/VersionCalculation/Caching/IGitVersionCacheKeyFactory.cs new file mode 100644 index 0000000000..29ae72d8b4 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Caching/IGitVersionCacheKeyFactory.cs @@ -0,0 +1,7 @@ +namespace GitVersion.VersionCalculation.Caching; + +public record GitVersionCacheKey(string Value); +internal interface IGitVersionCacheKeyFactory +{ + GitVersionCacheKey Create(IReadOnlyDictionary? overrideConfiguration); +} diff --git a/src/GitVersion.Core/VersionCalculation/Caching/IGitVersionCacheProvider.cs b/src/GitVersion.Core/VersionCalculation/Caching/IGitVersionCacheProvider.cs new file mode 100644 index 0000000000..a25909892e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Caching/IGitVersionCacheProvider.cs @@ -0,0 +1,9 @@ +using GitVersion.OutputVariables; + +namespace GitVersion.VersionCalculation.Caching; + +public interface IGitVersionCacheProvider +{ + void WriteVariablesToDiskCache(GitVersionVariables versionVariables); + GitVersionVariables? LoadVersionVariablesFromDiskCache(); +} diff --git a/src/GitVersion.Core/VersionCalculation/DeploymentMode.cs b/src/GitVersion.Core/VersionCalculation/DeploymentMode.cs new file mode 100644 index 0000000000..e6fa322591 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/DeploymentMode.cs @@ -0,0 +1,8 @@ +namespace GitVersion.VersionCalculation; + +public enum DeploymentMode +{ + ManualDeployment, + ContinuousDelivery, + ContinuousDeployment +} diff --git a/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs b/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs new file mode 100644 index 0000000000..95b7ab6703 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/EffectiveBranchConfigurationFinder.cs @@ -0,0 +1,67 @@ +using GitVersion.Common; +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +internal sealed class EffectiveBranchConfigurationFinder(ILog log, IRepositoryStore repositoryStore) : IEffectiveBranchConfigurationFinder +{ + private readonly ILog log = log.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + + public IEnumerable GetConfigurations(IBranch branch, IGitVersionConfiguration configuration) + { + branch.NotNull(); + configuration.NotNull(); + + return GetEffectiveConfigurationsRecursive(branch, configuration, null, []); + } + + private IEnumerable GetEffectiveConfigurationsRecursive( + IBranch branch, IGitVersionConfiguration configuration, IBranchConfiguration? childBranchConfiguration, HashSet traversedBranches) + { + if (!traversedBranches.Add(branch)) yield break; // This should never happen!! But it is good to have a circuit breaker. + + var branchConfiguration = configuration.GetBranchConfiguration(branch.Name); + if (childBranchConfiguration != null) + { + branchConfiguration = childBranchConfiguration.Inherit(branchConfiguration); + } + + IBranch[] sourceBranches = []; + if (branchConfiguration.Increment == IncrementStrategy.Inherit) + { + // At this point we need to check if source branches are available. + sourceBranches = this.repositoryStore.GetSourceBranches(branch, configuration, traversedBranches).ToArray(); + + if (sourceBranches.Length == 0) + { + // Because the actual branch is marked with the inherit increment strategy we need to either skip the iteration or go further + // while inheriting from the fallback branch configuration. This behavior is configurable via the increment settings of the configuration. + var skipTraversingOfOrphanedBranches = configuration.Increment == IncrementStrategy.Inherit; + this.log.Info( + $"An orphaned branch '{branch}' has been detected and will be skipped={skipTraversingOfOrphanedBranches}." + ); + if (skipTraversingOfOrphanedBranches) yield break; + } + } + + if (branchConfiguration.Increment == IncrementStrategy.Inherit && sourceBranches.Length != 0) + { + foreach (var sourceBranch in sourceBranches) + { + foreach (var effectiveConfiguration + in GetEffectiveConfigurationsRecursive(sourceBranch, configuration, branchConfiguration, traversedBranches)) + { + yield return effectiveConfiguration; + } + } + } + else + { + yield return new(new(configuration, branchConfiguration), branch); + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs b/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs index 45aa90e5c5..aa2be5fd26 100644 --- a/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs +++ b/src/GitVersion.Core/VersionCalculation/IncrementStrategy.cs @@ -1,5 +1,3 @@ -using GitVersion.Model.Configuration; - namespace GitVersion; public enum IncrementStrategy @@ -8,21 +6,5 @@ public enum IncrementStrategy Major, Minor, Patch, - /// - /// Uses the , and - /// of the "parent" branch (i.e. the branch where the current branch was branched from). - /// Inherit } - -public static class IncrementStrategyExtensions -{ - public static VersionField ToVersionField(this IncrementStrategy strategy) => strategy switch - { - IncrementStrategy.None => VersionField.None, - IncrementStrategy.Major => VersionField.Major, - IncrementStrategy.Minor => VersionField.Minor, - IncrementStrategy.Patch => VersionField.Patch, - _ => throw new ArgumentOutOfRangeException(nameof(strategy), strategy, null) - }; -} diff --git a/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs b/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs index 35c04cb59c..2a02f7bd6c 100644 --- a/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs +++ b/src/GitVersion.Core/VersionCalculation/IncrementStrategyFinder.cs @@ -1,11 +1,14 @@ using System.Collections.Concurrent; using System.Text.RegularExpressions; +using GitVersion.Configuration; +using GitVersion.Core; using GitVersion.Extensions; -using GitVersion.Model.Configuration; +using GitVersion.Git; namespace GitVersion.VersionCalculation; -public class IncrementStrategyFinder : IIncrementStrategyFinder +internal class IncrementStrategyFinder(IGitRepository repository, ITaggedSemanticVersionRepository taggedSemanticVersionRepository) + : IIncrementStrategyFinder { public const string DefaultMajorPattern = @"\+semver:\s?(breaking|major)"; public const string DefaultMinorPattern = @"\+semver:\s?(feature|minor)"; @@ -13,42 +16,37 @@ public class IncrementStrategyFinder : IIncrementStrategyFinder public const string DefaultNoBumpPattern = @"\+semver:\s?(none|skip)"; private static readonly ConcurrentDictionary CompiledRegexCache = new(); - private readonly Dictionary commitIncrementCache = new(); - private readonly Dictionary> headCommitsMapCache = new(); - private readonly Dictionary headCommitsCache = new(); + private readonly Dictionary commitIncrementCache = []; + private readonly Dictionary> headCommitsMapCache = []; + private readonly Dictionary headCommitsCache = []; private static readonly Regex DefaultMajorPatternRegex = new(DefaultMajorPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex DefaultMinorPatternRegex = new(DefaultMinorPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex DefaultPatchPatternRegex = new(DefaultPatchPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); private static readonly Regex DefaultNoBumpPatternRegex = new(DefaultNoBumpPattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); - private readonly IGitRepository repository; + private readonly IGitRepository repository = repository.NotNull(); + private readonly ITaggedSemanticVersionRepository taggedSemanticVersionRepository = taggedSemanticVersionRepository.NotNull(); - public IncrementStrategyFinder(IGitRepository repository) => this.repository = repository.NotNull(); - - public VersionField DetermineIncrementedField(GitVersionContext context, BaseVersion baseVersion, EffectiveConfiguration configuration) + public VersionField DetermineIncrementedField( + ICommit currentCommit, ICommit? baseVersionSource, bool shouldIncrement, EffectiveConfiguration configuration, string? label) { + currentCommit.NotNull(); configuration.NotNull(); - var commitMessageIncrement = FindCommitMessageIncrement(this.repository, context, configuration, baseVersion.BaseVersionSource); + var commitMessageIncrement = FindCommitMessageIncrement(configuration, baseVersionSource, currentCommit, label); var defaultIncrement = configuration.Increment.ToVersionField(); - // use the default branch config increment strategy if there are no commit message overrides + // use the default branch configuration increment strategy if there are no commit message overrides if (commitMessageIncrement == null) { - return baseVersion.ShouldIncrement ? defaultIncrement : VersionField.None; - } - - // cap the commit message severity to minor for alpha versions - if (baseVersion.SemanticVersion < new SemanticVersion(1) && commitMessageIncrement > VersionField.Minor) - { - commitMessageIncrement = VersionField.Minor; + return shouldIncrement ? defaultIncrement : VersionField.None; } - // don't increment for less than the branch config increment, if the absence of commit messages would have + // don't increment for less than the branch configuration increment, if the absence of commit messages would have // still resulted in an increment of configuration.Increment - if (baseVersion.ShouldIncrement && commitMessageIncrement < defaultIncrement) + if (shouldIncrement && commitMessageIncrement < defaultIncrement) { return defaultIncrement; } @@ -56,85 +54,136 @@ public VersionField DetermineIncrementedField(GitVersionContext context, BaseVer return commitMessageIncrement.Value; } - public VersionField? GetIncrementForCommits(Config configuration, IEnumerable commits) + public VersionField? GetIncrementForCommits(string? majorVersionBumpMessage, string? minorVersionBumpMessage, + string? patchVersionBumpMessage, string? noBumpMessage, ICommit[] commits) { - var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, DefaultMajorPatternRegex); - var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, DefaultMinorPatternRegex); - var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, DefaultPatchPatternRegex); - var none = TryGetRegexOrDefault(configuration.NoBumpMessage, DefaultNoBumpPatternRegex); + commits.NotNull(); + + var majorRegex = TryGetRegexOrDefault(majorVersionBumpMessage, DefaultMajorPatternRegex); + var minorRegex = TryGetRegexOrDefault(minorVersionBumpMessage, DefaultMinorPatternRegex); + var patchRegex = TryGetRegexOrDefault(patchVersionBumpMessage, DefaultPatchPatternRegex); + var none = TryGetRegexOrDefault(noBumpMessage, DefaultNoBumpPatternRegex); var increments = commits .Select(c => GetIncrementFromCommit(c, majorRegex, minorRegex, patchRegex, none)) .Where(v => v != null) .ToList(); - return increments.Any() + return increments.Count != 0 ? increments.Max() : null; } - private VersionField? FindCommitMessageIncrement(IGitRepository repository, GitVersionContext context, - EffectiveConfiguration configuration, ICommit? baseCommit) + private VersionField? FindCommitMessageIncrement( + EffectiveConfiguration configuration, ICommit? baseVersionSource, ICommit currentCommit, string? label) { - if (baseCommit == null) return null; - if (configuration.CommitMessageIncrementing == CommitMessageIncrementMode.Disabled) { return null; } - var commits = GetIntermediateCommits(repository, baseCommit, context.CurrentCommit); - - // consider commit messages since latest tag only (see #3071) - var tags = new HashSet(repository.Tags.Select(t => t.TargetSha)); - commits = commits - .Reverse() - .TakeWhile(x => !tags.Contains(x.Sha)) - .Reverse(); + IEnumerable commits = GetCommitHistory( + tagPrefix: configuration.TagPrefix, + semanticVersionFormat: configuration.SemanticVersionFormat, + baseVersionSource: baseVersionSource, + currentCommit: currentCommit, + label: label, + ignore: configuration.Ignore + ); if (configuration.CommitMessageIncrementing == CommitMessageIncrementMode.MergeMessageOnly) { commits = commits.Where(c => c.Parents.Count() > 1); } - return GetIncrementForCommits(context.FullConfiguration, commits); + return GetIncrementForCommits( + majorVersionBumpMessage: configuration.MajorVersionBumpMessage, + minorVersionBumpMessage: configuration.MinorVersionBumpMessage, + patchVersionBumpMessage: configuration.PatchVersionBumpMessage, + noBumpMessage: configuration.NoBumpMessage, + commits: commits.ToArray() + ); } private static Regex TryGetRegexOrDefault(string? messageRegex, Regex defaultRegex) => messageRegex == null ? defaultRegex - : CompiledRegexCache.GetOrAdd(messageRegex, pattern => new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase)); + : CompiledRegexCache.GetOrAdd(messageRegex, pattern => new(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase)); + + private IReadOnlyCollection GetCommitHistory(string? tagPrefix, SemanticVersionFormat semanticVersionFormat, + ICommit? baseVersionSource, ICommit currentCommit, string? label, IIgnoreConfiguration ignore) + { + var targetShas = new Lazy>(() => + taggedSemanticVersionRepository + .GetTaggedSemanticVersions(tagPrefix, semanticVersionFormat, ignore) + .SelectMany(_ => _) + .Where(_ => _.Value.IsMatchForBranchSpecificLabel(label)) + .Select(_ => _.Tag.TargetSha) + .ToHashSet() + ); + + var intermediateCommits = GetIntermediateCommits(baseVersionSource, currentCommit, ignore).ToArray(); + var commitLog = intermediateCommits.ToDictionary(element => element.Id.Sha); + + foreach (var intermediateCommit in intermediateCommits.Reverse()) + { + if (targetShas.Value.Contains(intermediateCommit.Sha) && commitLog.Remove(intermediateCommit.Sha)) + { + var parentCommits = intermediateCommit.Parents.ToList(); + while (parentCommits.Count != 0) + { + List temporaryList = []; + foreach (var parentCommit in parentCommits) + { + if (commitLog.Remove(parentCommit.Sha)) + { + temporaryList.AddRange(parentCommit.Parents); + } + } + parentCommits = temporaryList; + } + } + } + + return commitLog.Values; + } /// - /// Get the sequence of commits in a between a (exclusive) + /// Get the sequence of commits in a repository between a (exclusive) /// and a particular (inclusive) /// - private IEnumerable GetIntermediateCommits(IGitRepository repository, IGitObject baseCommit, ICommit? headCommit) + private IEnumerable GetIntermediateCommits(ICommit? baseCommit, ICommit headCommit, IIgnoreConfiguration ignore) { - var map = GetHeadCommitsMap(repository, headCommit); - if (!map.TryGetValue(baseCommit.Sha, out var baseIndex)) return Enumerable.Empty(); - var commitAfterBaseIndex = baseIndex + 1; - var headCommits = GetHeadCommits(repository, headCommit); + var map = GetHeadCommitsMap(headCommit, ignore); + + var commitAfterBaseIndex = 0; + if (baseCommit != null) + { + if (!map.TryGetValue(baseCommit.Sha, out var baseIndex)) return []; + commitAfterBaseIndex = baseIndex + 1; + } + + var headCommits = GetHeadCommits(headCommit, ignore); return new ArraySegment(headCommits, commitAfterBaseIndex, headCommits.Length - commitAfterBaseIndex); } /// /// Get a mapping of commit shas to their zero-based position in the sequence of commits from the beginning of a - /// to a particular + /// repository to a particular /// - private Dictionary GetHeadCommitsMap(IGitRepository repository, ICommit? headCommit) => + private Dictionary GetHeadCommitsMap(ICommit? headCommit, IIgnoreConfiguration ignore) => this.headCommitsMapCache.GetOrAdd(headCommit?.Sha ?? "NULL", () => - GetHeadCommits(repository, headCommit) + GetHeadCommits(headCommit, ignore) .Select((commit, index) => (commit.Sha, Index: index)) .ToDictionary(t => t.Sha, t => t.Index)); /// - /// Get the sequence of commits from the beginning of a to a particular + /// Get the sequence of commits from the beginning of a repository to a particular /// (inclusive) /// - private ICommit[] GetHeadCommits(IGitRepository repository, ICommit? headCommit) => + private ICommit[] GetHeadCommits(ICommit? headCommit, IIgnoreConfiguration ignore) => this.headCommitsCache.GetOrAdd(headCommit?.Sha ?? "NULL", () => - GetCommitsReacheableFromHead(repository, headCommit).ToArray()); + GetCommitsReacheableFromHead(headCommit, ignore).ToArray()); private VersionField? GetIncrementFromCommit(ICommit commit, Regex majorRegex, Regex minorRegex, Regex patchRegex, Regex none) => this.commitIncrementCache.GetOrAdd(commit.Sha, () => @@ -142,18 +191,14 @@ private ICommit[] GetHeadCommits(IGitRepository repository, ICommit? headCommit) private static VersionField? GetIncrementFromMessage(string message, Regex majorRegex, Regex minorRegex, Regex patchRegex, Regex none) { + if (none.IsMatch(message)) return VersionField.None; if (majorRegex.IsMatch(message)) return VersionField.Major; if (minorRegex.IsMatch(message)) return VersionField.Minor; if (patchRegex.IsMatch(message)) return VersionField.Patch; - if (none.IsMatch(message)) return VersionField.None; return null; } - /// - /// Query a for the sequence of commits from the beginning to a particular - /// (inclusive) - /// - private static IEnumerable GetCommitsReacheableFromHead(IGitRepository repo, ICommit? headCommit) + private IEnumerable GetCommitsReacheableFromHead(ICommit? headCommit, IIgnoreConfiguration ignore) { var filter = new CommitFilter { @@ -161,6 +206,47 @@ private static IEnumerable GetCommitsReacheableFromHead(IGitRepository SortBy = CommitSortStrategies.Topological | CommitSortStrategies.Reverse }; - return repo.Commits.QueryBy(filter); + var commits = repository.Commits.QueryBy(filter); + return ignore.Filter(commits); + } + + public IEnumerable GetMergedCommits(ICommit mergeCommit, int index, IIgnoreConfiguration ignore) + { + mergeCommit.NotNull(); + + if (!mergeCommit.IsMergeCommit()) + { + throw new ArgumentException("The parameter is not a merge commit.", nameof(mergeCommit)); + } + + ICommit baseCommit = mergeCommit.Parents.First(); + ICommit mergedCommit = GetMergedHead(mergeCommit); + if (index == 0) (mergedCommit, baseCommit) = (baseCommit, mergedCommit); + + ICommit findMergeBase = this.repository.FindMergeBase(baseCommit, mergedCommit) + ?? throw new InvalidOperationException("Cannot find the base commit of merged branch."); + + return GetIntermediateCommits(findMergeBase, mergedCommit, ignore); + } + + private static ICommit GetMergedHead(ICommit mergeCommit) + { + var parents = mergeCommit.Parents.Skip(1).ToList(); + if (parents.Count > 1) + throw new NotSupportedException("GitVersion does not support more than one merge source in a single commit yet"); + return parents.Single(); + } + + public VersionField GetIncrementForcedByCommit(ICommit commit, IGitVersionConfiguration configuration) + { + commit.NotNull(); + configuration.NotNull(); + + var majorRegex = TryGetRegexOrDefault(configuration.MajorVersionBumpMessage, DefaultMajorPatternRegex); + var minorRegex = TryGetRegexOrDefault(configuration.MinorVersionBumpMessage, DefaultMinorPatternRegex); + var patchRegex = TryGetRegexOrDefault(configuration.PatchVersionBumpMessage, DefaultPatchPatternRegex); + var none = TryGetRegexOrDefault(configuration.NoBumpMessage, DefaultNoBumpPatternRegex); + + return GetIncrementFromCommit(commit, majorRegex, minorRegex, patchRegex, none) ?? VersionField.None; } } diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/EnrichIncrement.cs b/src/GitVersion.Core/VersionCalculation/Mainline/EnrichIncrement.cs new file mode 100644 index 0000000000..91ad98cdd9 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/EnrichIncrement.cs @@ -0,0 +1,48 @@ +using System.ComponentModel; +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation.Mainline; + +internal sealed class EnrichIncrement : IContextPreEnricher +{ + public void Enrich(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + var incrementForcedByBranch = effectiveConfiguration.Increment.ToVersionField(); + var incrementForcedByCommit = commit.IsDummy + ? VersionField.None + : GetIncrementForcedByCommit(context, commit.Value, effectiveConfiguration); + commit.Increment = incrementForcedByCommit; + context.Increment = context.Increment.Consolidate(incrementForcedByBranch, incrementForcedByCommit); + + if (commit.Predecessor is not null && commit.Predecessor.BranchName != commit.BranchName) + context.Label = null; + context.Label ??= effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + + if (effectiveConfiguration.IsMainBranch) + context.BaseVersionSource = commit.Predecessor?.Value; + context.ForceIncrement |= effectiveConfiguration.IsMainBranch || commit.IsPredecessorTheLastCommitOnTrunk(context.Configuration); + } + + private static VersionField GetIncrementForcedByCommit( + MainlineContext context, ICommit commit, EffectiveConfiguration configuration) + { + context.NotNull(); + commit.NotNull(); + configuration.NotNull(); + + return configuration.CommitMessageIncrementing switch + { + CommitMessageIncrementMode.Enabled + => context.IncrementStrategyFinder.GetIncrementForcedByCommit(commit, context.Configuration), + CommitMessageIncrementMode.Disabled => VersionField.None, + CommitMessageIncrementMode.MergeMessageOnly => commit.IsMergeCommit() + ? context.IncrementStrategyFinder.GetIncrementForcedByCommit(commit, context.Configuration) : VersionField.None, + _ => throw new InvalidEnumArgumentException( + nameof(configuration.CommitMessageIncrementing), (int)configuration.CommitMessageIncrementing, typeof(CommitMessageIncrementMode) + ) + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/EnrichSemanticVersion.cs b/src/GitVersion.Core/VersionCalculation/Mainline/EnrichSemanticVersion.cs new file mode 100644 index 0000000000..ec0efc946b --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/EnrichSemanticVersion.cs @@ -0,0 +1,22 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline; + +internal sealed class EnrichSemanticVersion : IContextPreEnricher +{ + public void Enrich(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + var branchSpecificLabel = context.TargetLabel; + branchSpecificLabel ??= iteration.GetEffectiveConfiguration(context.Configuration) + .GetBranchSpecificLabel(commit.BranchName, null); + branchSpecificLabel ??= commit.GetEffectiveConfiguration(context.Configuration) + .GetBranchSpecificLabel(commit.BranchName, null); + + var semanticVersions = commit.SemanticVersions.Where( + element => element.IsMatchForBranchSpecificLabel(branchSpecificLabel) + ).ToList(); + context.AlternativeSemanticVersions.AddRange(commit.SemanticVersions.Except(semanticVersions)); + context.SemanticVersion = semanticVersions.Max(); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/IContextPostEnricher.cs b/src/GitVersion.Core/VersionCalculation/Mainline/IContextPostEnricher.cs new file mode 100644 index 0000000000..301ddccca0 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/IContextPostEnricher.cs @@ -0,0 +1,6 @@ +namespace GitVersion.VersionCalculation.Mainline; + +internal interface IContextPostEnricher +{ + void Enrich(MainlineIteration iteration, MainlineCommit commit, MainlineContext context); +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/IContextPreEnricher.cs b/src/GitVersion.Core/VersionCalculation/Mainline/IContextPreEnricher.cs new file mode 100644 index 0000000000..cff057cc93 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/IContextPreEnricher.cs @@ -0,0 +1,6 @@ +namespace GitVersion.VersionCalculation.Mainline; + +internal interface IContextPreEnricher +{ + void Enrich(MainlineIteration iteration, MainlineCommit commit, MainlineContext context); +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/IIncrementer.cs b/src/GitVersion.Core/VersionCalculation/Mainline/IIncrementer.cs new file mode 100644 index 0000000000..eeb2ef0a9c --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/IIncrementer.cs @@ -0,0 +1,9 @@ +namespace GitVersion.VersionCalculation.Mainline; + +internal interface IIncrementer +{ + bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context); + + IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context); +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/MainlineCommit.cs b/src/GitVersion.Core/VersionCalculation/Mainline/MainlineCommit.cs new file mode 100644 index 0000000000..02d9d7b64e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/MainlineCommit.cs @@ -0,0 +1,117 @@ +using System.Diagnostics.CodeAnalysis; +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation.Mainline; + +[DebuggerDisplay( + @"\{ BranchName = {" + nameof(BranchName) + "}, Increment = {" + nameof(Increment) + "}, " + + "HasSuccessor = {" + nameof(HasSuccessor) + "}, HasPredecessor = {" + nameof(HasPredecessor) + "}, " + + "HasChildIteration = {" + nameof(HasChildIteration) + "}, Message = {" + nameof(Message) + @"} \}" +)] +internal record MainlineCommit(MainlineIteration Iteration, ICommit? value, ReferenceName BranchName, IBranchConfiguration Configuration) +{ + public bool IsPredecessorTheLastCommitOnTrunk(IGitVersionConfiguration configuration) + => !GetEffectiveConfiguration(configuration).IsMainBranch && Predecessor?.GetEffectiveConfiguration(configuration).IsMainBranch == true; + + public VersionField Increment { get; set; } + + public MainlineIteration Iteration { get; } = Iteration.NotNull(); + + public ReferenceName BranchName { get; } = BranchName.NotNull(); + + private IBranchConfiguration Configuration { get; } = Configuration.NotNull(); + + public bool HasSuccessor => Successor is not null; + + public MainlineCommit? Successor { get; private set; } + + public bool HasPredecessor => Predecessor is not null; + + public MainlineCommit? Predecessor { get; private set; } + + public ICommit Value => IsDummy ? (Successor?.Value)! : value!; + + [MemberNotNullWhen(false, nameof(Value))] + public bool IsDummy => value is null; + + public string Message => IsDummy ? "<>" : Value.Message; + + public MainlineIteration? ChildIteration { get; private set; } + + [MemberNotNullWhen(true, nameof(ChildIteration))] + public bool HasChildIteration => ChildIteration is not null && ChildIteration.Commits.Count != 0; + + public MainlineIteration? ParentIteration => Iteration.ParentIteration; + + public MainlineCommit? ParentCommit => Iteration.ParentCommit; + + [MemberNotNullWhen(true, nameof(ParentIteration), nameof(ParentCommit))] + private bool HasParentIteration => Iteration.ParentIteration is not null && Iteration.ParentCommit is not null; + + public IReadOnlyCollection SemanticVersions => semanticVersions; + + private readonly HashSet semanticVersions = []; + + private EffectiveConfiguration? effectiveConfiguration; + + public EffectiveConfiguration GetEffectiveConfiguration(IGitVersionConfiguration configuration) + { + if (effectiveConfiguration is not null) return effectiveConfiguration; + + IBranchConfiguration branchConfiguration = Configuration; + + IBranchConfiguration last = Configuration; + for (var i = this; i is not null; i = i.Predecessor) + { + if (branchConfiguration.Increment != IncrementStrategy.Inherit) break; + + if (i.Configuration != last) + { + branchConfiguration = branchConfiguration.Inherit(i.Configuration); + } + + last = i.Configuration; + } + + if (branchConfiguration.Increment == IncrementStrategy.Inherit && HasParentIteration) + { + var parentConfiguration = ParentCommit.GetEffectiveConfiguration(configuration); + branchConfiguration = branchConfiguration.Inherit(parentConfiguration); + } + + return effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration); + } + + public VersionField GetIncrementForcedByBranch(IGitVersionConfiguration configuration) + { + var result = GetEffectiveConfiguration(configuration); + return result.Increment.ToVersionField(); + } + + public void AddSemanticVersions(params SemanticVersion[] values) + => AddSemanticVersions((IEnumerable)values); + + public void AddSemanticVersions(IEnumerable values) + { + foreach (var semanticVersion in values.NotNull()) + { + semanticVersions.Add(semanticVersion); + } + } + + public void AddChildIteration(MainlineIteration iteration) => ChildIteration = iteration.NotNull(); + + public MainlineCommit Append( + ICommit? referenceValue, ReferenceName branchName, IBranchConfiguration configuration) + { + if (HasPredecessor) throw new InvalidOperationException(); + + MainlineCommit commit = new(Iteration, referenceValue, branchName, configuration); + Predecessor = commit; + commit.Successor = this; + + return commit; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/MainlineContext.cs b/src/GitVersion.Core/VersionCalculation/Mainline/MainlineContext.cs new file mode 100644 index 0000000000..3657484b37 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/MainlineContext.cs @@ -0,0 +1,26 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation.Mainline; + +internal record MainlineContext(IIncrementStrategyFinder IncrementStrategyFinder, IGitVersionConfiguration Configuration) +{ + public IIncrementStrategyFinder IncrementStrategyFinder { get; } = IncrementStrategyFinder.NotNull(); + + public IGitVersionConfiguration Configuration { get; } = Configuration.NotNull(); + + public string? TargetLabel { get; init; } + + public SemanticVersion? SemanticVersion { get; set; } + + public string? Label { get; set; } + + public VersionField Increment { get; set; } + + public ICommit? BaseVersionSource { get; set; } + + public HashSet AlternativeSemanticVersions { get; } = []; + + public bool ForceIncrement { get; set; } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/MainlineIteration.cs b/src/GitVersion.Core/VersionCalculation/Mainline/MainlineIteration.cs new file mode 100644 index 0000000000..3f37deeaeb --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/MainlineIteration.cs @@ -0,0 +1,88 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation.Mainline; + +[DebuggerDisplay( + @"\{ Id = {" + nameof(Id) + "}, " + + "BranchName = {" + nameof(BranchName) + "}, " + + "Depth = {" + nameof(Depth) + "}, " + + "NumberOfCommits = {" + nameof(NumberOfCommits) + "}" + @"} \}" +)] +internal record MainlineIteration +{ + public IBranchConfiguration Configuration { get; } + + private EffectiveConfiguration? effectiveConfiguration; + + public EffectiveConfiguration GetEffectiveConfiguration(IGitVersionConfiguration configuration) + { + if (this.effectiveConfiguration is not null) + { + return this.effectiveConfiguration; + } + + IBranchConfiguration branchConfiguration = Configuration; + + if (branchConfiguration.Increment == IncrementStrategy.Inherit && Commits.FirstOrDefault() is { } commit) + { + var parentConfiguration = commit.GetEffectiveConfiguration(configuration); + branchConfiguration = branchConfiguration.Inherit(parentConfiguration); + } + + return this.effectiveConfiguration = new EffectiveConfiguration(configuration, branchConfiguration); + } + + public MainlineIteration? ParentIteration { get; } + + public MainlineCommit? ParentCommit { get; } + + public string Id { get; } + + public ReferenceName BranchName { get; } + + public int Depth { get; } + + public int NumberOfCommits => commits.Count; + + public IReadOnlyCollection Commits => commits; + private readonly Stack commits = new(); + + private readonly Dictionary commitLookup = []; + + public MainlineIteration(string id, ReferenceName branchName, IBranchConfiguration configuration, + MainlineIteration? parentIteration, MainlineCommit? parentCommit) + { + Id = id.NotNullOrEmpty(); + Depth = parentIteration?.Depth ?? 0 + 1; + BranchName = branchName.NotNull(); + Configuration = configuration.NotNull(); + ParentIteration = parentIteration; + ParentCommit = parentCommit; + } + + public MainlineCommit CreateCommit( + ICommit? value, ReferenceName branchName, IBranchConfiguration configuration) + { + var commit = this.commits.Count != 0 + ? this.commits.Peek().Append(value, branchName, configuration) + : new MainlineCommit(this, value, branchName, configuration); + commits.Push(commit); + + if (value is not null) + { + commitLookup.Add(value, commit); + } + + return commit; + } + + public MainlineCommit? FindCommit(ICommit commit) + { + commit.NotNull(); + + commitLookup.TryGetValue(commit, out var result); + return result; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunk.cs new file mode 100644 index 0000000000..9b05e8cb88 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunk.cs @@ -0,0 +1,43 @@ +using GitVersion.Configuration; + +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class CommitOnNonTrunk : IIncrementer +{ + // B 57 minutes ago (HEAD -> feature/foo) + // A 58 minutes ago <<-- + + // B 57 minutes ago (HEAD -> feature/foo) <<-- + // A 58 minutes ago + + public bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => !commit.HasChildIteration + && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && context.SemanticVersion is null; + + public IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + if (commit.Predecessor is not null && commit.Predecessor.BranchName != commit.BranchName) + context.Label = null; + + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + context.Label ??= effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + + if (commit.Successor is null) + { + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + + context.BaseVersionSource = commit.Value; + context.ForceIncrement = false; + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedBase.cs new file mode 100644 index 0000000000..b926b41957 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedBase.cs @@ -0,0 +1,37 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal abstract class CommitOnNonTrunkBranchedBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && commit.BranchName != iteration.BranchName + && commit.Successor is null; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + context.BaseVersionSource = commit.Value; + + var incrementForcedByBranch = iteration.Configuration.Increment == IncrementStrategy.Inherit + ? commit.GetIncrementForcedByBranch(context.Configuration) + : iteration.Configuration.Increment.ToVersionField(); + context.Increment = context.Increment.Consolidate(incrementForcedByBranch); + + var iterationEffectiveConfiguration = iteration.GetEffectiveConfiguration(context.Configuration); + context.Label = iterationEffectiveConfiguration.GetBranchSpecificLabel(iteration.BranchName, null) ?? context.Label; + context.ForceIncrement = true; + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = null, + Increment = VersionField.None, + ForceIncrement = false, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedToNonTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedToNonTrunk.cs new file mode 100644 index 0000000000..265a0682e1 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedToNonTrunk.cs @@ -0,0 +1,19 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class CommitOnNonTrunkBranchedToNonTrunk : CommitOnNonTrunkBranchedBase +{ + // B 51 minutes ago (HEAD -> feature/foo, main) <<-- + // A 59 minutes ago + + // B 58 minutes ago (main) + // A 59 minutes ago (HEAD -> feature/foo) <<-- + + // * 54 minutes ago (main) + // | B 56 minutes ago (HEAD -> feature/foo) + // |/ + // A 58 minutes ago <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) + && !iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedToTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedToTrunk.cs new file mode 100644 index 0000000000..0b69a31024 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkBranchedToTrunk.cs @@ -0,0 +1,19 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class CommitOnNonTrunkBranchedToTrunk : CommitOnNonTrunkBranchedBase +{ + // B 51 minutes ago (HEAD -> release/1.0.x, main) <<-- + // A 59 minutes ago + + // B 58 minutes ago (main) + // A 59 minutes ago (HEAD -> release/1.0.x) <<-- + + // * 54 minutes ago (main) + // | B 56 minutes ago (HEAD -> release/1.0.x) + // |/ + // A 58 minutes ago <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) + && iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithPreReleaseTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithPreReleaseTag.cs new file mode 100644 index 0000000000..d829bdec15 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithPreReleaseTag.cs @@ -0,0 +1,10 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class CommitOnNonTrunkWithPreReleaseTag : CommitOnNonTrunkWithPreReleaseTagBase +{ + // B 57 minutes ago (HEAD -> feature/foo) + // A 58 minutes ago (tag 1.2.3-1) <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is not null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithPreReleaseTagBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithPreReleaseTagBase.cs new file mode 100644 index 0000000000..d3cb4690fd --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithPreReleaseTagBase.cs @@ -0,0 +1,30 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal abstract class CommitOnNonTrunkWithPreReleaseTagBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => !commit.HasChildIteration + && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && context.SemanticVersion?.IsPreRelease == true; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + context.BaseVersionSource = commit.Value; + + yield return new BaseVersionOperand() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + SemanticVersion = context.SemanticVersion.NotNull() + }; + + context.Increment = commit.GetIncrementForcedByBranch(context.Configuration); + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + context.Label = effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + context.ForceIncrement = false; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithStableTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithStableTag.cs new file mode 100644 index 0000000000..ec2fdae507 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithStableTag.cs @@ -0,0 +1,10 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class CommitOnNonTrunkWithStableTag : CommitOnNonTrunkWithStableTagBase +{ + // B 57 minutes ago (HEAD -> feature/foo) + // A 58 minutes ago (tag 1.2.3) <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is not null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithStableTagBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithStableTagBase.cs new file mode 100644 index 0000000000..89b7ef9f5d --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/CommitOnNonTrunkWithStableTagBase.cs @@ -0,0 +1,29 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal abstract class CommitOnNonTrunkWithStableTagBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && !commit.HasChildIteration + && context.SemanticVersion?.IsPreRelease == false; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + context.BaseVersionSource = commit.Value; + + yield return new BaseVersionOperand() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + SemanticVersion = context.SemanticVersion.NotNull() + }; + + context.Increment = commit.GetIncrementForcedByBranch(context.Configuration); + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + context.Label = effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/FirstCommitOnRelease.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/FirstCommitOnRelease.cs new file mode 100644 index 0000000000..d6a7d8d97c --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/FirstCommitOnRelease.cs @@ -0,0 +1,39 @@ +using GitVersion.Configuration; + +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +/// +/// This incrementer identifies the first commit on a branch marked with IsReleaseBranch true and appends the version number for +/// instance 1.0.0 (extracted from the branch name) as an alternative semantic version to the context. This information will be +/// used later to bump the version number to a higher value if necessary. +/// +internal sealed class FirstCommitOnRelease : IIncrementer +{ + // B 57 minutes ago (HEAD -> release/1.0.0) + // A 58 minutes ago <<-- + + // A 58 minutes ago (HEAD -> release/1.0.0) <<-- + + // C 56 minutes ago (HEAD -> release/1.0.0) + // B 57 minutes ago <<-- + // A 58 minutes ago (main) + + public bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => !commit.HasChildIteration + && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && commit.GetEffectiveConfiguration(context.Configuration).IsReleaseBranch + && context.SemanticVersion is null + && (commit.Predecessor is null + || commit.BranchName != commit.Predecessor?.BranchName); + + public IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + if (commit.BranchName.TryGetSemanticVersion(out var element, effectiveConfiguration)) + { + context.AlternativeSemanticVersions.Add(element.Value); + yield break; + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastCommitOnNonTrunkWithPreReleaseTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastCommitOnNonTrunkWithPreReleaseTag.cs new file mode 100644 index 0000000000..3316057741 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastCommitOnNonTrunkWithPreReleaseTag.cs @@ -0,0 +1,29 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class LastCommitOnNonTrunkWithPreReleaseTag : CommitOnNonTrunkWithPreReleaseTagBase +{ + // B 57 minutes ago (HEAD -> feature/foo) (tag 1.2.3-1) <<-- + // A 58 minutes ago + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is null; + + public override IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + foreach (var item in base.GetIncrements(iteration, commit, context)) + { + yield return item; + } + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = false, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastCommitOnNonTrunkWithStableTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastCommitOnNonTrunkWithStableTag.cs new file mode 100644 index 0000000000..c9fbed2946 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastCommitOnNonTrunkWithStableTag.cs @@ -0,0 +1,29 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class LastCommitOnNonTrunkWithStableTag : CommitOnNonTrunkWithStableTagBase +{ + // B 57 minutes ago (HEAD -> feature/foo) (tag 1.2.3) <<-- + // A 58 minutes ago + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is null; + + public override IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + foreach (var item in base.GetIncrements(iteration, commit, context)) + { + yield return item; + } + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = true, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastMergeCommitOnNonTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastMergeCommitOnNonTrunk.cs new file mode 100644 index 0000000000..960b7c8002 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/LastMergeCommitOnNonTrunk.cs @@ -0,0 +1,30 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class LastMergeCommitOnNonTrunk : MergeCommitOnNonTrunkBase +{ + // * 55 minutes ago (HEAD -> develop) <<-- + // |\ + // | B 56 minutes ago (feature/foo) + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is null; + + public override IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + foreach (var item in base.GetIncrements(iteration, commit, context)) + { + yield return item; + } + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.TargetLabel ?? context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/MergeCommitOnNonTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/MergeCommitOnNonTrunk.cs new file mode 100644 index 0000000000..8fca598267 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/MergeCommitOnNonTrunk.cs @@ -0,0 +1,12 @@ +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal sealed class MergeCommitOnNonTrunk : MergeCommitOnNonTrunkBase +{ + // C 53 minutes ago (HEAD -> develop) + // * 55 minutes ago <<-- + // |\ + // | B 56 minutes ago (feature/foo) + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is not null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/MergeCommitOnNonTrunkBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/MergeCommitOnNonTrunkBase.cs new file mode 100644 index 0000000000..18b41fe1e0 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/NonTrunk/MergeCommitOnNonTrunkBase.cs @@ -0,0 +1,64 @@ +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.NonTrunk; + +internal abstract class MergeCommitOnNonTrunkBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => commit.HasChildIteration + && !commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && context.SemanticVersion is null; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + if (commit.ChildIteration is null) throw new InvalidOperationException("The commit child iteration is null."); + + var baseVersion = MainlineVersionStrategy.DetermineBaseVersionRecursive( + iteration: commit.ChildIteration, + targetLabel: context.TargetLabel, + incrementStrategyFinder: context.IncrementStrategyFinder, + configuration: context.Configuration + ); + + context.Label ??= baseVersion.Operator?.Label; + + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + var increment = VersionField.None; + if (!effectiveConfiguration.PreventIncrementOfMergedBranch) + { + increment = increment.Consolidate(context.Increment); + } + + if (!effectiveConfiguration.PreventIncrementWhenBranchMerged) + { + increment = increment.Consolidate(baseVersion.Operator?.Increment); + } + + if (effectiveConfiguration.CommitMessageIncrementing != CommitMessageIncrementMode.Disabled) + { + increment = increment.Consolidate(commit.Increment); + } + context.Increment = increment; + + if (baseVersion.BaseVersionSource is not null) + { + context.BaseVersionSource = baseVersion.BaseVersionSource; + context.SemanticVersion = baseVersion.SemanticVersion; + } + else + { + if (baseVersion.SemanticVersion != SemanticVersion.Empty) + { + context.AlternativeSemanticVersions.Add(baseVersion.SemanticVersion); + } + + if (baseVersion.Operator?.AlternativeSemanticVersion is not null) + { + context.AlternativeSemanticVersions.Add(baseVersion.Operator.AlternativeSemanticVersion); + } + } + + yield break; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/RemoveIncrement.cs b/src/GitVersion.Core/VersionCalculation/Mainline/RemoveIncrement.cs new file mode 100644 index 0000000000..cc2687f28e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/RemoveIncrement.cs @@ -0,0 +1,14 @@ +namespace GitVersion.VersionCalculation.Mainline; + +internal sealed class RemoveIncrement : IContextPostEnricher +{ + public void Enrich(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + if (commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch) + { + context.Increment = VersionField.None; + context.Label = null; + context.AlternativeSemanticVersions.Clear(); + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/RemoveSemanticVersion.cs b/src/GitVersion.Core/VersionCalculation/Mainline/RemoveSemanticVersion.cs new file mode 100644 index 0000000000..802a15f491 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/RemoveSemanticVersion.cs @@ -0,0 +1,6 @@ +namespace GitVersion.VersionCalculation.Mainline; + +internal sealed class RemoveSemanticVersion : IContextPostEnricher +{ + public void Enrich(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) => context.SemanticVersion = null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunk.cs new file mode 100644 index 0000000000..ad49fb058e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunk.cs @@ -0,0 +1,39 @@ +using GitVersion.Configuration; + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class CommitOnTrunk : IIncrementer +{ + // B 57 minutes ago (HEAD -> main) <<-- + // A 58 minutes ago + + // B 57 minutes ago (HEAD -> main) + // A 58 minutes ago <<-- + + public bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => !commit.HasChildIteration + && commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch && context.SemanticVersion is null; + + public IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + if (commit.Predecessor is not null && commit.Predecessor.BranchName != commit.BranchName) + context.Label = null; + + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + context.Label ??= effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + context.ForceIncrement = true; + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + + context.BaseVersionSource = commit.Value; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedBase.cs new file mode 100644 index 0000000000..c56cdea82e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedBase.cs @@ -0,0 +1,44 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal abstract class CommitOnTrunkBranchedBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch + && commit.BranchName != iteration.BranchName + && commit.Successor is null; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + context.BaseVersionSource = commit.Value; + + var effectiveConfiguration = iteration.GetEffectiveConfiguration(context.Configuration); + if (iteration.GetEffectiveConfiguration(context.Configuration).IsReleaseBranch + && iteration.BranchName.TryGetSemanticVersion(out var element, effectiveConfiguration)) + { + context.AlternativeSemanticVersions.Add(element.Value); + } + + var incrementForcedByBranch = iteration.Configuration.Increment == IncrementStrategy.Inherit + ? commit.GetIncrementForcedByBranch(context.Configuration) + : iteration.Configuration.Increment.ToVersionField(); + context.Increment = incrementForcedByBranch; + + var iterationEffectiveConfiguration = iteration.GetEffectiveConfiguration(context.Configuration); + context.Label = iterationEffectiveConfiguration.GetBranchSpecificLabel(iteration.BranchName, null) ?? context.Label; + context.ForceIncrement = true; + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedToNonTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedToNonTrunk.cs new file mode 100644 index 0000000000..9ad2d1664e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedToNonTrunk.cs @@ -0,0 +1,19 @@ +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class CommitOnTrunkBranchedToNonTrunk : CommitOnTrunkBranchedBase +{ + // B 51 minutes ago (HEAD -> feature/foo, main) <<-- + // A 59 minutes ago + + // B 58 minutes ago (main) + // A 59 minutes ago (HEAD -> feature/foo) <<-- + + // * 54 minutes ago (main) + // | B 56 minutes ago (HEAD -> feature/foo) + // |/ + // A 58 minutes ago <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) + && !iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedToTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedToTrunk.cs new file mode 100644 index 0000000000..2963a6e01e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkBranchedToTrunk.cs @@ -0,0 +1,19 @@ +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class CommitOnTrunkBranchedToTrunk : CommitOnTrunkBranchedBase +{ + // B 51 minutes ago (HEAD -> release/1.0.x, main) <<-- + // A 59 minutes ago + + // B 58 minutes ago (main) + // A 59 minutes ago (HEAD -> release/1.0.x) <<-- + + // * 54 minutes ago (main) + // | B 56 minutes ago (HEAD -> release/1.0.x) + // |/ + // A 58 minutes ago <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) + && iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithPreReleaseTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithPreReleaseTag.cs new file mode 100644 index 0000000000..41a4d56f2a --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithPreReleaseTag.cs @@ -0,0 +1,10 @@ +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class CommitOnTrunkWithPreReleaseTag : CommitOnTrunkWithPreReleaseTagBase +{ + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago (tag 0.2.0-1) <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is not null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithPreReleaseTagBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithPreReleaseTagBase.cs new file mode 100644 index 0000000000..27e63c5205 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithPreReleaseTagBase.cs @@ -0,0 +1,23 @@ +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal abstract class CommitOnTrunkWithPreReleaseTagBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch && !commit.HasChildIteration + && context.SemanticVersion?.IsPreRelease == true; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + context.BaseVersionSource = commit.Value; + + yield return new BaseVersionOperand() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + SemanticVersion = context.SemanticVersion.NotNull() + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithStableTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithStableTag.cs new file mode 100644 index 0000000000..c75a6d2f60 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithStableTag.cs @@ -0,0 +1,10 @@ +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class CommitOnTrunkWithStableTag : CommitOnTrunkWithStableTagBase +{ + // B 58 minutes ago (HEAD -> main) + // A 59 minutes ago (tag 0.2.0) <<-- + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is not null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithStableTagBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithStableTagBase.cs new file mode 100644 index 0000000000..bd1eae48d2 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/CommitOnTrunkWithStableTagBase.cs @@ -0,0 +1,27 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal abstract class CommitOnTrunkWithStableTagBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch && !commit.HasChildIteration + && context.SemanticVersion?.IsPreRelease == false; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + context.BaseVersionSource = commit.Value; + + yield return new BaseVersionOperand() + { + Source = GetType().Name, + SemanticVersion = context.SemanticVersion.NotNull(), + BaseVersionSource = context.BaseVersionSource + }; + + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + context.Label = effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastCommitOnTrunkWithPreReleaseTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastCommitOnTrunkWithPreReleaseTag.cs new file mode 100644 index 0000000000..7612974e9e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastCommitOnTrunkWithPreReleaseTag.cs @@ -0,0 +1,40 @@ +using GitVersion.Configuration; + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class LastCommitOnTrunkWithPreReleaseTag : CommitOnTrunkWithPreReleaseTagBase +{ + // B 58 minutes ago (HEAD -> main) (tag 0.2.0-1) <<-- + // A 59 minutes ago + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is null; + + public override IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + foreach (var item in base.GetIncrements(iteration, commit, context)) + { + yield return item; + } + + if (iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch) + { + context.Increment = commit.GetIncrementForcedByBranch(context.Configuration); + + var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration); + context.Label = effectiveConfiguration.GetBranchSpecificLabel(commit.BranchName, null); + context.ForceIncrement = false; + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastCommitOnTrunkWithStableTag.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastCommitOnTrunkWithStableTag.cs new file mode 100644 index 0000000000..525ee1f6b5 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastCommitOnTrunkWithStableTag.cs @@ -0,0 +1,34 @@ +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class LastCommitOnTrunkWithStableTag : CommitOnTrunkWithStableTagBase +{ + // B 58 minutes ago (HEAD -> main) (tag 0.2.0) <<-- + // A 59 minutes ago + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is null; + + public override IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + foreach (var item in base.GetIncrements(iteration, commit, context)) + { + yield return item; + } + + if (iteration.GetEffectiveConfiguration(context.Configuration).IsMainBranch) + { + context.ForceIncrement = true; + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastMergeCommitOnTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastMergeCommitOnTrunk.cs new file mode 100644 index 0000000000..54d034fda9 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/LastMergeCommitOnTrunk.cs @@ -0,0 +1,12 @@ + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class LastMergeCommitOnTrunk : MergeCommitOnTrunkBase +{ + // * 55 minutes ago (HEAD -> main) <<-- + // |\ + // | B 56 minutes ago (feature/foo) + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/MergeCommitOnTrunk.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/MergeCommitOnTrunk.cs new file mode 100644 index 0000000000..eafd1086a3 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/MergeCommitOnTrunk.cs @@ -0,0 +1,12 @@ +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal sealed class MergeCommitOnTrunk : MergeCommitOnTrunkBase +{ + // C 53 minutes ago (HEAD -> main) + // * 55 minutes ago <<-- + // |\ + // | B 56 minutes ago (feature/foo) + + public override bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => base.MatchPrecondition(iteration, commit, context) && commit.Successor is not null; +} diff --git a/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/MergeCommitOnTrunkBase.cs b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/MergeCommitOnTrunkBase.cs new file mode 100644 index 0000000000..f731d26a7d --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/Mainline/Trunk/MergeCommitOnTrunkBase.cs @@ -0,0 +1,75 @@ +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation.Mainline.Trunk; + +internal abstract class MergeCommitOnTrunkBase : IIncrementer +{ + public virtual bool MatchPrecondition(MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + => commit.HasChildIteration && commit.GetEffectiveConfiguration(context.Configuration).IsMainBranch && context.SemanticVersion is null; + + public virtual IEnumerable GetIncrements( + MainlineIteration iteration, MainlineCommit commit, MainlineContext context) + { + if (commit.ChildIteration is null) throw new InvalidOperationException("The commit child iteration is null."); + + var baseVersion = MainlineVersionStrategy.DetermineBaseVersionRecursive( + iteration: commit.ChildIteration!, + targetLabel: context.TargetLabel, + incrementStrategyFinder: context.IncrementStrategyFinder, + configuration: context.Configuration + ); + + context.Label ??= baseVersion.Operator?.Label; + + var increment = VersionField.None; + + if (!commit.GetEffectiveConfiguration(context.Configuration).PreventIncrementOfMergedBranch) + { + increment = increment.Consolidate(context.Increment); + } + + if (!commit.ChildIteration.GetEffectiveConfiguration(context.Configuration).PreventIncrementWhenBranchMerged) + { + increment = increment.Consolidate(baseVersion.Operator?.Increment); + } + + if (commit.GetEffectiveConfiguration(context.Configuration).CommitMessageIncrementing != CommitMessageIncrementMode.Disabled) + { + increment = increment.Consolidate(commit.Increment); + } + context.Increment = increment; + + if (baseVersion.BaseVersionSource is not null) + { + context.BaseVersionSource = baseVersion.BaseVersionSource; + context.SemanticVersion = baseVersion.SemanticVersion; + context.ForceIncrement = baseVersion.Operator?.ForceIncrement ?? false; + } + else if (baseVersion.Operator?.AlternativeSemanticVersion is not null) + { + context.AlternativeSemanticVersions.Add(baseVersion.Operator.AlternativeSemanticVersion); + } + + if (context.SemanticVersion is not null) + { + yield return new BaseVersionOperand() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + SemanticVersion = context.SemanticVersion.NotNull() + }; + } + + yield return new BaseVersionOperator() + { + Source = GetType().Name, + BaseVersionSource = context.BaseVersionSource, + Increment = context.Increment, + ForceIncrement = context.ForceIncrement, + Label = context.Label, + AlternativeSemanticVersion = context.AlternativeSemanticVersions.Max() + }; + + context.BaseVersionSource = commit.Value; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs deleted file mode 100644 index fd1c9d8b15..0000000000 --- a/src/GitVersion.Core/VersionCalculation/MainlineVersionCalculator.cs +++ /dev/null @@ -1,313 +0,0 @@ -using GitVersion.Common; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.Logging; - -namespace GitVersion.VersionCalculation; - -internal class MainlineVersionCalculator : IMainlineVersionCalculator -{ - private readonly ILog log; - private readonly IRepositoryStore repositoryStore; - private readonly Lazy versionContext; - private readonly IIncrementStrategyFinder incrementStrategyFinder; - private GitVersionContext context => this.versionContext.Value; - - public MainlineVersionCalculator(ILog log, IRepositoryStore repositoryStore, Lazy versionContext, IIncrementStrategyFinder incrementStrategyFinder) - { - this.log = log.NotNull(); - this.repositoryStore = repositoryStore.NotNull(); - this.versionContext = versionContext.NotNull(); - this.incrementStrategyFinder = incrementStrategyFinder.NotNull(); - } - - public SemanticVersion FindMainlineModeVersion(BaseVersion baseVersion) - { - if (baseVersion.SemanticVersion.PreReleaseTag?.HasTag() == true) - { - throw new NotSupportedException("Mainline development mode doesn't yet support pre-release tags on main"); - } - - using (this.log.IndentLog("Using mainline development mode to calculate current version")) - { - var mainlineVersion = baseVersion.SemanticVersion; - - // Forward merge / PR - // * feature/foo - // / | - // main * * - // - - var mergeBase = baseVersion.BaseVersionSource; - var mainline = GetMainline(baseVersion.BaseVersionSource); - var mainlineTip = mainline.Tip; - - // when the current branch is not mainline, find the effective mainline tip for versioning the branch - if (!context.CurrentBranch.Equals(mainline)) - { - (mergeBase, mainlineTip) = FindMergeBaseBeforeForwardMerge(baseVersion.BaseVersionSource, mainline); - this.log.Info($"Current branch ({context.CurrentBranch}) was branch from {mergeBase}"); - } - - var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersion.BaseVersionSource, mainlineTip).ToList(); - var directCommits = new List(mainlineCommitLog.Count); - - var nextVersion = context.FullConfiguration.NextVersion; - if (nextVersion.IsNullOrEmpty()) - { - // Scans commit log in reverse, aggregating merge commits - foreach (var commit in mainlineCommitLog) - { - directCommits.Add(commit); - if (commit.Parents.Count() > 1) - { - mainlineVersion = AggregateMergeCommitIncrement(commit, directCommits, mainlineVersion, mainline); - } - } - - // This will increment for any direct commits on mainline - mainlineVersion = IncrementForEachCommit(directCommits, mainlineVersion, mainline); - } - - mainlineVersion.BuildMetaData = CreateVersionBuildMetaData(mergeBase); - - // branches other than main always get a bump for the act of branching - if (!context.CurrentBranch.Equals(mainline) && nextVersion.IsNullOrEmpty()) - { - var branchIncrement = FindMessageIncrement(null, context.CurrentCommit, mergeBase, mainlineCommitLog); - this.log.Info($"Performing {branchIncrement} increment for current branch "); - - mainlineVersion = mainlineVersion.IncrementVersion(branchIncrement); - } - - return mainlineVersion; - } - } - - public SemanticVersionBuildMetaData CreateVersionBuildMetaData(ICommit? baseVersionSource) - { - var commitLog = this.repositoryStore.GetCommitLog(baseVersionSource, context.CurrentCommit); - var commitsSinceTag = commitLog.Count(); - this.log.Info($"{commitsSinceTag} commits found between {baseVersionSource} and {context.CurrentCommit}"); - - var shortSha = context.CurrentCommit?.Id.ToString(7); - return new SemanticVersionBuildMetaData( - baseVersionSource?.Sha, - commitsSinceTag, - context.CurrentBranch.Name.Friendly, - context.CurrentCommit?.Sha, - shortSha, - context.CurrentCommit?.When, - context.NumberOfUncommittedChanges); - } - - - private SemanticVersion AggregateMergeCommitIncrement(ICommit commit, List directCommits, SemanticVersion mainlineVersion, IBranch mainline) - { - // Merge commit, process all merged commits as a batch - var mergeCommit = commit; - var mergedHead = GetMergedHead(mergeCommit); - var findMergeBase = this.repositoryStore.FindMergeBase(mergeCommit.Parents.First(), mergedHead); - var findMessageIncrement = FindMessageIncrement(mergeCommit, mergedHead, findMergeBase, directCommits); - - // If this collection is not empty there has been some direct commits against main - // Treat each commit as it's own 'release', we need to do this before we increment the branch - mainlineVersion = IncrementForEachCommit(directCommits, mainlineVersion, mainline); - directCommits.Clear(); - - // Finally increment for the branch - mainlineVersion = mainlineVersion.IncrementVersion(findMessageIncrement); - this.log.Info($"Merge commit {mergeCommit} incremented base versions {findMessageIncrement}, now {mainlineVersion}"); - return mainlineVersion; - } - - private IBranch GetMainline(ICommit? baseVersionSource) - { - var mainlineBranchConfigs = context.FullConfiguration.Branches.Where(b => b.Value?.IsMainline == true).ToList(); - - IDictionary> mainlineBranches = new Dictionary>(); - if (context.CurrentCommit != null) - { - mainlineBranches = this.repositoryStore.GetMainlineBranches(context.CurrentCommit, context.FullConfiguration, mainlineBranchConfigs); - } - - if (!mainlineBranches.Any()) - { - var mainlineBranchConfigsString = string.Join(", ", mainlineBranchConfigs.Where(x => x.Value != null).Select(b => b.Value?.Name)); - throw new WarningException($"No branches can be found matching the commit {context.CurrentCommit?.Sha} in the configured Mainline branches: {mainlineBranchConfigsString}"); - } - - var mainlineBranchNames = mainlineBranches.Values.SelectMany(branches => branches.Select(b => b.Name.Friendly)); - this.log.Info("Found possible mainline branches: " + string.Join(", ", mainlineBranchNames)); - - // Find closest mainline branch - var firstMatchingCommit = context.CurrentBranch.Commits?.FirstOrDefault(c => mainlineBranches.ContainsKey(c.Sha)); - if (firstMatchingCommit is null) - { - var mainlineBranchList = mainlineBranches.Values.SelectMany(x => x).ToList(); - return FindMainlineBranch(mainlineBranchList, baseVersionSource, context.CurrentCommit); - } - - var possibleMainlineBranches = mainlineBranches[firstMatchingCommit.Sha]; - return FindMainlineBranch(possibleMainlineBranches, baseVersionSource, firstMatchingCommit); - } - - private IBranch FindMainlineBranch(List possibleMainlineBranches, ICommit? baseVersionSource, ICommit? firstMatchingCommit) - { - if (possibleMainlineBranches.Count == 1) - { - var mainlineBranch = possibleMainlineBranches[0]; - this.log.Info($"Mainline for current branch is {mainlineBranch}"); - return mainlineBranch; - } - - // prefer current branch, if it is a mainline branch - if (possibleMainlineBranches.Any(context.CurrentBranch.Equals)) - { - this.log.Info($"Choosing {context.CurrentBranch} as mainline because it is the current branch"); - return context.CurrentBranch; - } - - // prefer a branch on which the merge base was a direct commit, if there is such a branch - var firstMatchingCommitBranch = firstMatchingCommit != null - ? possibleMainlineBranches.FirstOrDefault(b => this.repositoryStore.IsCommitOnBranch(baseVersionSource, b, firstMatchingCommit)) - : null; - - if (firstMatchingCommitBranch != null) - { - var message = string.Format( - "Choosing {0} as mainline because {1}'s merge base was a direct commit to {0}", - firstMatchingCommitBranch, - context.CurrentBranch); - this.log.Info(message); - - return firstMatchingCommitBranch; - } - - var chosenMainline = possibleMainlineBranches[0]; - this.log.Info($"Multiple mainlines ({string.Join(", ", possibleMainlineBranches.Select(b => b))}) have the same merge base for the current branch, choosing {chosenMainline} because we found that branch first..."); - return chosenMainline; - } - - - /// - /// Gets the commit on mainline at which was fully integrated. - /// - /// The collection of commits made directly to mainline, in reverse order. - /// The best possible merge base between and the current commit. - /// The tip of the mainline branch. - /// The commit on mainline at which was merged, if such a commit exists; otherwise, . - /// - /// This method gets the most recent commit on mainline that should be considered for versioning the current branch. - /// - private ICommit? GetEffectiveMainlineTip(IEnumerable mainlineCommitLog, ICommit mergeBase, ICommit? mainlineTip) - { - // find the commit that merged mergeBase into mainline - foreach (var commit in mainlineCommitLog) - { - if (Equals(commit, mergeBase) || commit.Parents.Contains(mergeBase)) - { - this.log.Info($"Found branch merge point; choosing {commit} as effective mainline tip"); - return commit; - } - } - - return mainlineTip; - } - - /// - /// Gets the best possible merge base between the current commit and that is not the child of a forward merge. - /// - /// The commit that establishes the contextual base version. - /// The mainline branch. - /// The best possible merge base between the current commit and that is not the child of a forward merge. - private (ICommit? mergeBase, ICommit? mainlineTip) FindMergeBaseBeforeForwardMerge(ICommit? baseVersionSource, IBranch mainline) - { - var mainlineTipCurrent = mainline.Tip; - var mainlineCommitLog = this.repositoryStore.GetMainlineCommitLog(baseVersionSource, mainlineTipCurrent).ToList(); - - // find the mainline commit effective for versioning the current branch - if (context.CurrentCommit != null && mainlineTipCurrent != null) - { - var mergeBase = this.repositoryStore.FindMergeBase(context.CurrentCommit, mainlineTipCurrent); - if (mergeBase != null) - { - var mainlineTip = GetEffectiveMainlineTip(mainlineCommitLog, mergeBase, mainlineTipCurrent); - - // detect forward merge and rewind mainlineTip to before it - if (Equals(mergeBase, context.CurrentCommit) && !mainlineCommitLog.Contains(mergeBase)) - { - var mainlineTipPrevious = mainlineTip?.Parents.FirstOrDefault(); - if (mainlineTipPrevious != null) - { - this.log.Info($"Detected forward merge at {mainlineTip}; rewinding mainline to previous commit {mainlineTipPrevious}"); - - // re-do mergeBase detection before the forward merge - mergeBase = this.repositoryStore.FindMergeBase(context.CurrentCommit, mainlineTipPrevious); - if (mergeBase != null) - mainlineTip = GetEffectiveMainlineTip(mainlineCommitLog, mergeBase, mainlineTipPrevious); - } - } - - return (mergeBase, mainlineTip); - } - } - return (null, null); - } - - private SemanticVersion IncrementForEachCommit(IEnumerable directCommits, SemanticVersion mainlineVersion, INamedReference mainline) - { - foreach (var directCommit in directCommits) - { - var directCommitIncrement = this.incrementStrategyFinder.GetIncrementForCommits(context.FullConfiguration, new[] { directCommit }) - ?? FindDefaultIncrementForBranch(context, mainline.Name.Friendly); - mainlineVersion = mainlineVersion.IncrementVersion(directCommitIncrement); - this.log.Info($"Direct commit on main {directCommit} incremented base versions {directCommitIncrement}, now {mainlineVersion}"); - } - - return mainlineVersion; - } - - private VersionField FindMessageIncrement(ICommit? mergeCommit, ICommit? mergedHead, ICommit? findMergeBase, List commitLog) - { - var commits = this.repositoryStore.GetMergeBaseCommits(mergeCommit, mergedHead, findMergeBase); - commitLog.RemoveAll(c => commits.Any(c1 => c1.Sha == c.Sha)); - return this.incrementStrategyFinder.GetIncrementForCommits(context.FullConfiguration, commits) ?? TryFindIncrementFromMergeMessage(mergeCommit); - } - - private VersionField TryFindIncrementFromMergeMessage(ICommit? mergeCommit) - { - if (mergeCommit != null) - { - var mergeMessage = new MergeMessage(mergeCommit.Message, context.FullConfiguration); - var config = context.FullConfiguration.GetBranchConfiguration(mergeMessage.MergedBranch); - if (config?.Increment != null && config.Increment != IncrementStrategy.Inherit) - { - return config.Increment.Value.ToVersionField(); - } - } - - // Fallback to config increment value - return FindDefaultIncrementForBranch(context); - } - - private static VersionField FindDefaultIncrementForBranch(GitVersionContext context, string? branchName = null) - { - var config = context.FullConfiguration.GetBranchConfiguration(branchName ?? context.CurrentBranch.Name.WithoutRemote); - if (config?.Increment != null && config.Increment != IncrementStrategy.Inherit) - { - return config.Increment.Value.ToVersionField(); - } - - // Fallback to patch - return VersionField.Patch; - } - - private static ICommit GetMergedHead(ICommit mergeCommit) - { - var parents = mergeCommit.Parents.Skip(1).ToList(); - if (parents.Count > 1) - throw new NotSupportedException("Mainline development does not support more than one merge source in a single commit yet"); - return parents.Single(); - } -} diff --git a/src/GitVersion.Core/VersionCalculation/MinDateVersionFilter.cs b/src/GitVersion.Core/VersionCalculation/MinDateVersionFilter.cs index 2e611b0c5d..b2fce8b7e6 100644 --- a/src/GitVersion.Core/VersionCalculation/MinDateVersionFilter.cs +++ b/src/GitVersion.Core/VersionCalculation/MinDateVersionFilter.cs @@ -1,20 +1,17 @@ using System.Diagnostics.CodeAnalysis; +using GitVersion.Extensions; namespace GitVersion.VersionCalculation; -public class MinDateVersionFilter : IVersionFilter +internal class MinDateVersionFilter(DateTimeOffset minimum) : IVersionFilter { - private readonly DateTimeOffset minimum; - - public MinDateVersionFilter(DateTimeOffset minimum) => this.minimum = minimum; - - public bool Exclude(BaseVersion version, [NotNullWhen(true)] out string? reason) + public bool Exclude(IBaseVersion baseVersion, [NotNullWhen(true)] out string? reason) { - if (version == null) throw new ArgumentNullException(nameof(version)); + baseVersion.NotNull(); reason = null; - if (version.BaseVersionSource == null || version.BaseVersionSource.When >= this.minimum) + if (baseVersion.BaseVersionSource == null || baseVersion.BaseVersionSource.When >= minimum) return false; reason = "Source was ignored due to commit date being outside of configured range"; diff --git a/src/GitVersion.Core/VersionCalculation/NextVersion.cs b/src/GitVersion.Core/VersionCalculation/NextVersion.cs index 4d23c16e0d..fb21719cd9 100644 --- a/src/GitVersion.Core/VersionCalculation/NextVersion.cs +++ b/src/GitVersion.Core/VersionCalculation/NextVersion.cs @@ -1,30 +1,38 @@ +using GitVersion.Configuration; using GitVersion.Extensions; -using GitVersion.Model.Configuration; namespace GitVersion.VersionCalculation; -public class NextVersion +public class NextVersion(SemanticVersion incrementedVersion, IBaseVersion baseVersion, EffectiveBranchConfiguration configuration) + : IComparable, IEquatable { - public BaseVersion BaseVersion { get; set; } + public IBaseVersion BaseVersion { get; } = baseVersion.NotNull(); - public SemanticVersion IncrementedVersion { get; } + public SemanticVersion IncrementedVersion { get; } = incrementedVersion.NotNull(); - public IBranch Branch { get; } + public EffectiveBranchConfiguration BranchConfiguration { get; } = configuration; - public EffectiveConfiguration Configuration { get; } + public EffectiveConfiguration Configuration => BranchConfiguration.Value; - public NextVersion(SemanticVersion incrementedVersion, BaseVersion baseVersion, EffectiveBranchConfiguration configuration) - : this(incrementedVersion, baseVersion, configuration.NotNull().Branch, configuration.NotNull().Value) - { - } + public int CompareTo(NextVersion? other) => IncrementedVersion.CompareTo(other?.IncrementedVersion); - public NextVersion(SemanticVersion incrementedVersion, BaseVersion baseVersion, IBranch branch, EffectiveConfiguration configuration) - { - IncrementedVersion = incrementedVersion.NotNull(); - BaseVersion = baseVersion.NotNull(); - Configuration = configuration.NotNull(); - Branch = branch.NotNull(); - } + public static bool operator ==(NextVersion left, NextVersion? right) => left.CompareTo(right) == 0; + + public static bool operator !=(NextVersion left, NextVersion right) => left.CompareTo(right) != 0; + + public static bool operator <(NextVersion left, NextVersion right) => left.CompareTo(right) < 0; + + public static bool operator <=(NextVersion left, NextVersion right) => left.CompareTo(right) <= 0; + + public static bool operator >(NextVersion left, NextVersion right) => left.CompareTo(right) > 0; + + public static bool operator >=(NextVersion left, NextVersion right) => left.CompareTo(right) >= 0; + + public bool Equals(NextVersion? other) => this == other; + + public override bool Equals(object? other) => other is NextVersion nextVersion && Equals(nextVersion); public override string ToString() => $"{BaseVersion} | {IncrementedVersion}"; + + public override int GetHashCode() => ToString().GetHashCode(); } diff --git a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs deleted file mode 100644 index 7103ef1c08..0000000000 --- a/src/GitVersion.Core/VersionCalculation/NextVersionCalculator.cs +++ /dev/null @@ -1,161 +0,0 @@ -using GitVersion.Common; -using GitVersion.Configuration; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.Model.Configuration; - -namespace GitVersion.VersionCalculation; - -public class NextVersionCalculator : INextVersionCalculator -{ - private readonly ILog log; - private readonly IBaseVersionCalculator baseVersionCalculator; - private readonly IMainlineVersionCalculator mainlineVersionCalculator; - private readonly IRepositoryStore repositoryStore; - private readonly IIncrementStrategyFinder incrementStrategyFinder; - private readonly Lazy versionContext; - - private GitVersionContext Context => this.versionContext.Value; - - public NextVersionCalculator( - ILog log, - IBaseVersionCalculator baseVersionCalculator, - IMainlineVersionCalculator mainlineVersionCalculator, - IRepositoryStore repositoryStore, - IIncrementStrategyFinder incrementStrategyFinder, - Lazy versionContext) - { - this.log = log.NotNull(); - this.baseVersionCalculator = baseVersionCalculator.NotNull(); - this.mainlineVersionCalculator = mainlineVersionCalculator.NotNull(); - this.repositoryStore = repositoryStore.NotNull(); - this.incrementStrategyFinder = incrementStrategyFinder.NotNull(); - this.versionContext = versionContext.NotNull(); - } - - public NextVersion FindVersion() - { - this.log.Info($"Running against branch: {Context.CurrentBranch} ({Context.CurrentCommit?.ToString() ?? "-"})"); - if (Context.IsCurrentCommitTagged) - { - this.log.Info($"Current commit is tagged with version {Context.CurrentCommitTaggedVersion}, " + "version calculation is for metadata only."); - } - - SemanticVersion? taggedSemanticVersion = null; - - if (Context.IsCurrentCommitTagged) - { - // Will always be 0, don't bother with the +0 on tags - var semanticVersionBuildMetaData = this.mainlineVersionCalculator.CreateVersionBuildMetaData(Context.CurrentCommit); - semanticVersionBuildMetaData.CommitsSinceTag = null; - - var semanticVersion = new SemanticVersion(Context.CurrentCommitTaggedVersion) { BuildMetaData = semanticVersionBuildMetaData }; - taggedSemanticVersion = semanticVersion; - } - - var (baseVersion, configuration) = this.baseVersionCalculator.GetBaseVersion(); - baseVersion.SemanticVersion.BuildMetaData = this.mainlineVersionCalculator.CreateVersionBuildMetaData(baseVersion.BaseVersionSource); - SemanticVersion semver; - if (Context.FullConfiguration.VersioningMode == VersioningMode.Mainline) - { - semver = this.mainlineVersionCalculator.FindMainlineModeVersion(baseVersion); - } - else - { - if (taggedSemanticVersion?.BuildMetaData == null || (taggedSemanticVersion.BuildMetaData?.Sha != baseVersion.SemanticVersion.BuildMetaData.Sha)) - { - semver = PerformIncrement(baseVersion, configuration.Value); - semver.BuildMetaData = this.mainlineVersionCalculator.CreateVersionBuildMetaData(baseVersion.BaseVersionSource); - } - else - { - semver = baseVersion.SemanticVersion; - } - } - - var hasPreReleaseTag = semver.PreReleaseTag?.HasTag() == true; - var tag = configuration.Value.Tag; - var branchConfigHasPreReleaseTagConfigured = !tag.IsNullOrEmpty(); - var branchConfigIsMainlineAndHasEmptyPreReleaseTagConfigured = configuration.Value.IsMainline && tag.IsEmpty(); - var preReleaseTagDoesNotMatchConfiguration = hasPreReleaseTag - && (branchConfigHasPreReleaseTagConfigured || branchConfigIsMainlineAndHasEmptyPreReleaseTagConfigured) - && semver.PreReleaseTag?.Name != tag; - var preReleaseTagOnlyInBranchConfig = !hasPreReleaseTag && branchConfigHasPreReleaseTagConfigured; - if (preReleaseTagOnlyInBranchConfig || preReleaseTagDoesNotMatchConfiguration) - { - UpdatePreReleaseTag(configuration.Value, semver, baseVersion.BranchNameOverride); - } - - if (taggedSemanticVersion != null) - { - // replace calculated version with tagged version only if tagged version greater or equal to calculated version - if (semver.CompareTo(taggedSemanticVersion, false) > 0) - { - taggedSemanticVersion = null; - } - else if (taggedSemanticVersion.BuildMetaData != null) - { - // set the commit count on the tagged ver - taggedSemanticVersion.BuildMetaData.CommitsSinceVersionSource = semver.BuildMetaData?.CommitsSinceVersionSource; - - // set the updated prerelease tag when it doesn't match with prerelease tag defined in branch configuration - if (preReleaseTagDoesNotMatchConfiguration) - { - taggedSemanticVersion.PreReleaseTag = semver.PreReleaseTag; - } - } - } - - var incrementedVersion = taggedSemanticVersion ?? semver; - return new(incrementedVersion, baseVersion, configuration); - } - - private SemanticVersion PerformIncrement(BaseVersion baseVersion, EffectiveConfiguration configuration) - { - var semver = baseVersion.SemanticVersion; - var increment = this.incrementStrategyFinder.DetermineIncrementedField(Context, baseVersion, configuration); - semver = semver.IncrementVersion(increment); - return semver; - } - - private void UpdatePreReleaseTag(EffectiveConfiguration configuration, SemanticVersion semanticVersion, string? branchNameOverride) - { - var tagToUse = configuration.GetBranchSpecificTag(this.log, Context.CurrentBranch.Name.Friendly, branchNameOverride); - - if (configuration.IsMainline && tagToUse.IsEmpty()) - { - semanticVersion.PreReleaseTag = new SemanticVersionPreReleaseTag(tagToUse, null); - return; - } - - long? number = null; - - var lastTag = this.repositoryStore - .GetVersionTagsOnBranch(Context.CurrentBranch, Context.FullConfiguration.TagPrefix) - .FirstOrDefault(v => v.PreReleaseTag?.Name?.IsEquivalentTo(tagToUse) == true); - - if (lastTag != null && MajorMinorPatchEqual(lastTag, semanticVersion) && lastTag.PreReleaseTag?.HasTag() == true) - { - number = lastTag.PreReleaseTag.Number + 1; - } - - number ??= 1; - - semanticVersion.PreReleaseTag = new SemanticVersionPreReleaseTag(tagToUse, number); - } - - private static void EnsureHeadIsNotDetached(GitVersionContext context) - { - if (context.CurrentBranch.IsDetachedHead != true) - { - return; - } - - var message = string.Format( - "It looks like the branch being examined is a detached Head pointing to commit '{0}'. " + "Without a proper branch name GitVersion cannot determine the build version.", - context.CurrentCommit?.Id.ToString(7)); - throw new WarningException(message); - } - - private static bool MajorMinorPatchEqual(SemanticVersion lastTag, SemanticVersion baseVersion) => lastTag.Major == baseVersion.Major && lastTag.Minor == baseVersion.Minor && lastTag.Patch == baseVersion.Patch; -} diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersion.cs b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersion.cs deleted file mode 100644 index a16317b618..0000000000 --- a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersion.cs +++ /dev/null @@ -1,309 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.Text.RegularExpressions; -using GitVersion.Extensions; - -namespace GitVersion; - -public class SemanticVersion : IFormattable, IComparable, IEquatable -{ - private static readonly SemanticVersion Empty = new(); - - private static readonly Regex ParseSemVer = new( - @"^(?(?\d+)(\.(?\d+))?(\.(?\d+))?)(\.(?\d+))?(-(?[^\+]*))?(\+(?.*))?$", - RegexOptions.Compiled); - - public long Major; - public long Minor; - public long Patch; - public SemanticVersionPreReleaseTag? PreReleaseTag; - public SemanticVersionBuildMetaData? BuildMetaData; - - public SemanticVersion(long major = 0, long minor = 0, long patch = 0) - { - this.Major = major; - this.Minor = minor; - this.Patch = patch; - this.PreReleaseTag = new SemanticVersionPreReleaseTag(); - this.BuildMetaData = new SemanticVersionBuildMetaData(); - } - - public SemanticVersion(SemanticVersion? semanticVersion) - { - this.Major = semanticVersion?.Major ?? 0; - this.Minor = semanticVersion?.Minor ?? 0; - this.Patch = semanticVersion?.Patch ?? 0; - - this.PreReleaseTag = new SemanticVersionPreReleaseTag(semanticVersion?.PreReleaseTag); - this.BuildMetaData = new SemanticVersionBuildMetaData(semanticVersion?.BuildMetaData); - } - - public bool Equals(SemanticVersion? obj) - { - if (obj == null) - { - return false; - } - return this.Major == obj.Major && - this.Minor == obj.Minor && - this.Patch == obj.Patch && - this.PreReleaseTag == obj.PreReleaseTag && - this.BuildMetaData == obj.BuildMetaData; - } - - public bool IsEmpty() => Equals(Empty); - - public override bool Equals(object? obj) - { - if (obj is null) - { - return false; - } - if (ReferenceEquals(this, obj)) - { - return true; - } - return obj.GetType() == GetType() && Equals((SemanticVersion)obj); - } - - public override int GetHashCode() - { - unchecked - { - var hashCode = this.Major.GetHashCode(); - hashCode = (hashCode * 397) ^ this.Minor.GetHashCode(); - hashCode = (hashCode * 397) ^ this.Patch.GetHashCode(); - hashCode = (hashCode * 397) ^ (this.PreReleaseTag != null ? this.PreReleaseTag.GetHashCode() : 0); - hashCode = (hashCode * 397) ^ (this.BuildMetaData != null ? this.BuildMetaData.GetHashCode() : 0); - return hashCode; - } - } - - public static bool operator ==(SemanticVersion? v1, SemanticVersion? v2) - { - if (v1 is null) - { - return v2 is null; - } - return v1.Equals(v2); - } - - public static bool operator !=(SemanticVersion? v1, SemanticVersion? v2) => !(v1 == v2); - - public static bool operator >(SemanticVersion v1, SemanticVersion v2) - { - if (v1 == null) - throw new ArgumentNullException(nameof(v1)); - if (v2 == null) - throw new ArgumentNullException(nameof(v2)); - return v1.CompareTo(v2) > 0; - } - - public static bool operator >=(SemanticVersion v1, SemanticVersion v2) - { - if (v1 == null) - throw new ArgumentNullException(nameof(v1)); - if (v2 == null) - throw new ArgumentNullException(nameof(v2)); - return v1.CompareTo(v2) >= 0; - } - - public static bool operator <=(SemanticVersion v1, SemanticVersion v2) - { - if (v1 == null) - throw new ArgumentNullException(nameof(v1)); - if (v2 == null) - throw new ArgumentNullException(nameof(v2)); - - return v1.CompareTo(v2) <= 0; - } - - public static bool operator <(SemanticVersion v1, SemanticVersion v2) - { - if (v1 == null) - throw new ArgumentNullException(nameof(v1)); - if (v2 == null) - throw new ArgumentNullException(nameof(v2)); - - return v1.CompareTo(v2) < 0; - } - - public static SemanticVersion Parse(string version, string? tagPrefixRegex) - { - if (!TryParse(version, tagPrefixRegex, out var semanticVersion)) - throw new WarningException($"Failed to parse {version} into a Semantic Version"); - - return semanticVersion; - } - - public static bool TryParse(string version, string? tagPrefixRegex, [NotNullWhen(true)] out SemanticVersion? semanticVersion) - { - var match = Regex.Match(version, $"^({tagPrefixRegex})?(?.*)$"); - - if (!match.Success) - { - semanticVersion = null; - return false; - } - - version = match.Groups["version"].Value; - var parsed = ParseSemVer.Match(version); - - if (!parsed.Success) - { - semanticVersion = null; - return false; - } - - var semanticVersionBuildMetaData = SemanticVersionBuildMetaData.Parse(parsed.Groups["BuildMetaData"].Value); - var fourthPart = parsed.Groups["FourthPart"]; - if (fourthPart.Success && semanticVersionBuildMetaData.CommitsSinceTag == null) - { - semanticVersionBuildMetaData.CommitsSinceTag = int.Parse(fourthPart.Value); - } - - semanticVersion = new SemanticVersion - { - Major = long.Parse(parsed.Groups["Major"].Value), - Minor = parsed.Groups["Minor"].Success ? long.Parse(parsed.Groups["Minor"].Value) : 0, - Patch = parsed.Groups["Patch"].Success ? long.Parse(parsed.Groups["Patch"].Value) : 0, - PreReleaseTag = SemanticVersionPreReleaseTag.Parse(parsed.Groups["Tag"].Value), - BuildMetaData = semanticVersionBuildMetaData - }; - - return true; - } - - public int CompareTo(SemanticVersion value) => CompareTo(value, true); - - public int CompareTo(SemanticVersion? value, bool includePrerelease) - { - if (value == null) - { - return 1; - } - if (this.Major != value.Major) - { - if (this.Major > value.Major) - { - return 1; - } - return -1; - } - if (this.Minor != value.Minor) - { - if (this.Minor > value.Minor) - { - return 1; - } - return -1; - } - if (this.Patch != value.Patch) - { - if (this.Patch > value.Patch) - { - return 1; - } - return -1; - } - if (includePrerelease && this.PreReleaseTag != value.PreReleaseTag) - { - if (this.PreReleaseTag > value.PreReleaseTag) - { - return 1; - } - return -1; - } - - return 0; - } - - public override string ToString() => ToString("s"); - - public string ToString(string format) => ToString(format, CultureInfo.CurrentCulture); - - /// - /// s - Default SemVer [1.2.3-beta.4] - /// f - Full SemVer [1.2.3-beta.4+5] - /// i - Informational SemVer [1.2.3-beta.4+5.Branch.main.BranchType.main.Sha.000000] - /// j - Just the SemVer part [1.2.3] - /// t - SemVer with the tag [1.2.3-beta.4] - /// l - Legacy SemVer tag for systems which do not support SemVer 2.0 properly [1.2.3-beta4] - /// lp - Legacy SemVer tag for systems which do not support SemVer 2.0 properly (padded) [1.2.3-beta0004] - /// - public string ToString(string? format, IFormatProvider? formatProvider) - { - if (format.IsNullOrEmpty()) - format = "s"; - - if (formatProvider?.GetFormat(GetType()) is ICustomFormatter formatter) - return formatter.Format(format, this, formatProvider); - - // Check for lp first because the param can vary - format = format.ToLower(); - if (format.StartsWith("lp", StringComparison.Ordinal)) - { - // handle the padding - return this.PreReleaseTag?.HasTag() == true ? $"{ToString("j")}-{this.PreReleaseTag.ToString(format)}" : ToString("j"); - } - - switch (format) - { - case "j": - return $"{this.Major}.{this.Minor}.{this.Patch}"; - case "s": - return this.PreReleaseTag?.HasTag() == true ? $"{ToString("j")}-{this.PreReleaseTag}" : ToString("j"); - case "t": - return this.PreReleaseTag?.HasTag() == true ? $"{ToString("j")}-{this.PreReleaseTag.ToString("t")}" : ToString("j"); - case "l": - return this.PreReleaseTag?.HasTag() == true ? $"{ToString("j")}-{this.PreReleaseTag.ToString("l")}" : ToString("j"); - case "f": - { - var buildMetadata = this.BuildMetaData?.ToString(); - - return !buildMetadata.IsNullOrEmpty() ? $"{ToString("s")}+{buildMetadata}" : ToString("s"); - } - case "i": - { - var buildMetadata = this.BuildMetaData?.ToString("f"); - - return !buildMetadata.IsNullOrEmpty() ? $"{ToString("s")}+{buildMetadata}" : ToString("s"); - } - default: - throw new FormatException($"Unknown format '{format}'."); - } - } - - public SemanticVersion IncrementVersion(VersionField incrementStrategy) - { - var incremented = new SemanticVersion(this); - if (incremented.PreReleaseTag?.HasTag() != true) - { - switch (incrementStrategy) - { - case VersionField.None: - break; - case VersionField.Major: - incremented.Major++; - incremented.Minor = 0; - incremented.Patch = 0; - break; - case VersionField.Minor: - incremented.Minor++; - incremented.Patch = 0; - break; - case VersionField.Patch: - incremented.Patch++; - break; - default: - throw new ArgumentOutOfRangeException(nameof(incrementStrategy)); - } - } - else if (incremented.PreReleaseTag.Number != null) - { - incremented.PreReleaseTag.Number++; - } - - return incremented; - } -} diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs index ef809ab386..1da7195708 100644 --- a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs +++ b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionFormatValues.cs @@ -1,98 +1,59 @@ using System.Globalization; +using GitVersion.Configuration; using GitVersion.Extensions; -using GitVersion.Model.Configuration; namespace GitVersion; -public class SemanticVersionFormatValues +public class SemanticVersionFormatValues(SemanticVersion semver, IGitVersionConfiguration configuration, int preReleaseWeight) { - private readonly SemanticVersion semver; - private readonly EffectiveConfiguration config; + public string Major => semver.Major.ToString(); - public SemanticVersionFormatValues(SemanticVersion semver, EffectiveConfiguration config) - { - this.semver = semver; - this.config = config; - } + public string Minor => semver.Minor.ToString(); - public string Major => this.semver.Major.ToString(); + public string Patch => semver.Patch.ToString(); - public string Minor => this.semver.Minor.ToString(); + public string PreReleaseTag => semver.PreReleaseTag.ToString(); - public string Patch => this.semver.Patch.ToString(); + public string PreReleaseTagWithDash => this.PreReleaseTag.WithPrefixIfNotNullOrEmpty("-"); - public string? PreReleaseTag => this.semver.PreReleaseTag; + public string PreReleaseLabel => semver.PreReleaseTag.Name; - public string? PreReleaseTagWithDash => this.semver.PreReleaseTag?.HasTag() == true ? "-" + this.semver.PreReleaseTag : null; + public string PreReleaseLabelWithDash => this.PreReleaseLabel.WithPrefixIfNotNullOrEmpty("-"); - public string? PreReleaseLabel => this.semver.PreReleaseTag?.HasTag() == true ? this.semver.PreReleaseTag.Name : null; + public string PreReleaseNumber => semver.PreReleaseTag.Number?.ToString() ?? string.Empty; - public string? PreReleaseLabelWithDash => this.semver.PreReleaseTag?.HasTag() == true ? "-" + this.semver.PreReleaseTag.Name : null; + public string WeightedPreReleaseNumber => semver.PreReleaseTag.Number.HasValue + ? $"{semver.PreReleaseTag.Number.Value + preReleaseWeight}" : $"{configuration.TagPreReleaseWeight}"; - public string? PreReleaseNumber => this.semver.PreReleaseTag?.HasTag() == true ? this.semver.PreReleaseTag.Number.ToString() : null; + public string BuildMetaData => semver.BuildMetaData.ToString(); - public string WeightedPreReleaseNumber => GetWeightedPreReleaseNumber(); + public string FullBuildMetaData => semver.BuildMetaData.ToString("f"); - public string? BuildMetaData => this.semver.BuildMetaData; + public string MajorMinorPatch => $"{semver.Major}.{semver.Minor}.{semver.Patch}"; - public string? BuildMetaDataPadded => this.semver.BuildMetaData?.ToString("p" + this.config.BuildMetaDataPadding); + public string SemVer => semver.ToString(); - public string? FullBuildMetaData => this.semver.BuildMetaData?.ToString("f"); + public string? AssemblySemVer => semver.GetAssemblyVersion(configuration.AssemblyVersioningScheme!.Value); - public string MajorMinorPatch => $"{this.semver.Major}.{this.semver.Minor}.{this.semver.Patch}"; + public string? AssemblyFileSemVer => semver.GetAssemblyFileVersion(configuration.AssemblyFileVersioningScheme!.Value); - public string SemVer => this.semver.ToString(); + public string FullSemVer => semver.ToString("f"); - public string LegacySemVer => this.semver.ToString("l"); + public string? BranchName => semver.BuildMetaData.Branch; - public string LegacySemVerPadded => this.semver.ToString("lp" + this.config.LegacySemVerPadding); + public string? EscapedBranchName => semver.BuildMetaData.Branch?.RegexReplace("[^a-zA-Z0-9-]", "-"); - public string? AssemblySemVer => this.semver.GetAssemblyVersion(this.config.AssemblyVersioningScheme); + public string? Sha => semver.BuildMetaData.Sha; - public string? AssemblyFileSemVer => this.semver.GetAssemblyFileVersion(this.config.AssemblyFileVersioningScheme); + public string? ShortSha => semver.BuildMetaData.ShortSha; - public string FullSemVer => this.semver.ToString("f"); + public string? CommitDate => semver.BuildMetaData.CommitDate?.UtcDateTime.ToString(configuration.CommitDateFormat, CultureInfo.InvariantCulture); - public string? BranchName => this.semver.BuildMetaData?.Branch; + public string InformationalVersion => semver.ToString("i"); - public string? EscapedBranchName => this.semver.BuildMetaData?.Branch?.RegexReplace("[^a-zA-Z0-9-]", "-"); + public string? VersionSourceSha => semver.BuildMetaData.VersionSourceSha; - public string? Sha => this.semver.BuildMetaData?.Sha; + public string CommitsSinceVersionSource => semver.BuildMetaData.CommitsSinceVersionSource.ToString(CultureInfo.InvariantCulture); - public string? ShortSha => this.semver.BuildMetaData?.ShortSha; - - public string? CommitDate => this.semver.BuildMetaData?.CommitDate?.UtcDateTime.ToString(this.config.CommitDateFormat, CultureInfo.InvariantCulture); - - // TODO When NuGet 3 is released: public string NuGetVersionV3 { get { return ??; } } - - public string NuGetVersionV2 => LegacySemVerPadded.ToLower(); - - public string NuGetVersion => NuGetVersionV2; - - public string? NuGetPreReleaseTagV2 => this.semver.PreReleaseTag?.HasTag() == true ? this.semver.PreReleaseTag?.ToString("lp").ToLower() : null; - - public string? NuGetPreReleaseTag => NuGetPreReleaseTagV2; - - public string InformationalVersion => this.semver.ToString("i"); - - [Obsolete("Use InformationalVersion instead")] - public string DefaultInformationalVersion => InformationalVersion; - - public string? VersionSourceSha => this.semver.BuildMetaData?.VersionSourceSha; - - public string? CommitsSinceVersionSource => this.semver.BuildMetaData?.CommitsSinceVersionSource?.ToString(CultureInfo.InvariantCulture); - - public string? CommitsSinceVersionSourcePadded => this.semver.BuildMetaData?.CommitsSinceVersionSource?.ToString(CultureInfo.InvariantCulture).PadLeft(this.config.CommitsSinceVersionSourcePadding, '0'); - - public string? UncommittedChanges => this.semver.BuildMetaData?.UncommittedChanges.ToString(CultureInfo.InvariantCulture); - - private string GetWeightedPreReleaseNumber() - { - var weightedPreReleaseNumber = - this.semver.PreReleaseTag?.HasTag() == true ? (this.semver.PreReleaseTag.Number + this.config.PreReleaseWeight).ToString() : null; - - return weightedPreReleaseNumber.IsNullOrEmpty() - ? $"{this.config.TagPreReleaseWeight}" - : weightedPreReleaseNumber; - } + public string UncommittedChanges => semver.BuildMetaData.UncommittedChanges.ToString(CultureInfo.InvariantCulture); } diff --git a/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionWithTag.cs b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionWithTag.cs new file mode 100644 index 0000000000..823c182244 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/SemanticVersioning/SemanticVersionWithTag.cs @@ -0,0 +1,10 @@ +using GitVersion.Git; + +namespace GitVersion; + +public sealed record SemanticVersionWithTag(SemanticVersion Value, ITag Tag) : IComparable +{ + public int CompareTo(SemanticVersionWithTag? other) => Value.CompareTo(other?.Value); + + public override string ToString() => $"{Tag} | {Tag.Commit} | {Value}"; +} diff --git a/src/GitVersion.Core/VersionCalculation/ShaVersionFilter.cs b/src/GitVersion.Core/VersionCalculation/ShaVersionFilter.cs index cf2d48ec26..7f27a6375b 100644 --- a/src/GitVersion.Core/VersionCalculation/ShaVersionFilter.cs +++ b/src/GitVersion.Core/VersionCalculation/ShaVersionFilter.cs @@ -3,23 +3,21 @@ namespace GitVersion.VersionCalculation; -public class ShaVersionFilter : IVersionFilter +internal class ShaVersionFilter(IEnumerable shaList) : IVersionFilter { - private readonly IEnumerable shas; + private readonly IEnumerable shaList = shaList.NotNull(); - public ShaVersionFilter(IEnumerable shas) => this.shas = shas.NotNull(); - - public bool Exclude(BaseVersion version, [NotNullWhen(true)] out string? reason) + public bool Exclude(IBaseVersion baseVersion, [NotNullWhen(true)] out string? reason) { - if (version == null) throw new ArgumentNullException(nameof(version)); + baseVersion.NotNull(); reason = null; - if (version.BaseVersionSource == null || !this.shas.Any(sha => version.BaseVersionSource.Sha.StartsWith(sha, StringComparison.OrdinalIgnoreCase))) + if (baseVersion.BaseVersionSource == null + || !this.shaList.Any(sha => baseVersion.BaseVersionSource.Sha.StartsWith(sha, StringComparison.OrdinalIgnoreCase))) return false; - reason = $"Sha {version.BaseVersionSource} was ignored due to commit having been excluded by configuration"; + reason = $"Sha {baseVersion.BaseVersionSource} was ignored due to commit having been excluded by configuration"; return true; - } } diff --git a/src/GitVersion.Core/VersionCalculation/VariableProvider.cs b/src/GitVersion.Core/VersionCalculation/VariableProvider.cs index 1924666e1d..0cb26fa7a7 100644 --- a/src/GitVersion.Core/VersionCalculation/VariableProvider.cs +++ b/src/GitVersion.Core/VersionCalculation/VariableProvider.cs @@ -1,75 +1,48 @@ -using System.Text.RegularExpressions; using GitVersion.Configuration; using GitVersion.Extensions; using GitVersion.Helpers; -using GitVersion.Logging; -using GitVersion.Model.Configuration; using GitVersion.OutputVariables; namespace GitVersion.VersionCalculation; -public class VariableProvider : IVariableProvider +internal sealed class VariableProvider(IEnvironment environment) : IVariableProvider { - private readonly IEnvironment environment; - private readonly ILog log; + private readonly IEnvironment environment = environment.NotNull(); - public VariableProvider(IEnvironment environment, ILog log) + public GitVersionVariables GetVariablesFor( + SemanticVersion semanticVersion, IGitVersionConfiguration configuration, int preReleaseWeight) { - this.environment = environment.NotNull(); - this.log = log.NotNull(); - } - - public VersionVariables GetVariablesFor(SemanticVersion semanticVersion, EffectiveConfiguration config, bool isCurrentCommitTagged) - { - var isContinuousDeploymentMode = config.VersioningMode == VersioningMode.ContinuousDeployment && !isCurrentCommitTagged; - if (isContinuousDeploymentMode) - { - semanticVersion = new SemanticVersion(semanticVersion); - // Continuous Deployment always requires a pre-release tag unless the commit is tagged - if (semanticVersion.PreReleaseTag != null && semanticVersion.PreReleaseTag.HasTag() != true) - { - semanticVersion.PreReleaseTag.Name = config.GetBranchSpecificTag(this.log, semanticVersion.BuildMetaData?.Branch, null); - if (semanticVersion.PreReleaseTag.Name.IsNullOrEmpty()) - { - semanticVersion.PreReleaseTag.Name = config.ContinuousDeploymentFallbackTag; - } - } - } - - // Evaluate tag number pattern and append to prerelease tag, preserving build metadata - var appendTagNumberPattern = !config.TagNumberPattern.IsNullOrEmpty() && semanticVersion.PreReleaseTag?.HasTag() == true; - if (appendTagNumberPattern) - { - if (semanticVersion.BuildMetaData?.Branch != null && config.TagNumberPattern != null) - { - var match = Regex.Match(semanticVersion.BuildMetaData.Branch, config.TagNumberPattern); - var numberGroup = match.Groups["number"]; - if (numberGroup.Success && semanticVersion.PreReleaseTag != null) - { - semanticVersion.PreReleaseTag.Name += numberGroup.Value.PadLeft(config.BuildMetaDataPadding, '0'); - } - } - } - - if (isContinuousDeploymentMode || appendTagNumberPattern || config.VersioningMode == VersioningMode.Mainline) - { - PromoteNumberOfCommitsToTagNumber(semanticVersion); - } - - var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, config); - - var informationalVersion = CheckAndFormatString(config.AssemblyInformationalFormat, semverFormatValues, semverFormatValues.InformationalVersion, "AssemblyInformationalVersion"); - - var assemblyFileSemVer = CheckAndFormatString(config.AssemblyFileVersioningFormat, semverFormatValues, semverFormatValues.AssemblyFileSemVer, "AssemblyFileVersioningFormat"); - - var assemblySemVer = CheckAndFormatString(config.AssemblyVersioningFormat, semverFormatValues, semverFormatValues.AssemblySemVer, "AssemblyVersioningFormat"); - - var variables = new VersionVariables( + semanticVersion.NotNull(); + configuration.NotNull(); + + var semverFormatValues = new SemanticVersionFormatValues(semanticVersion, configuration, preReleaseWeight); + + var informationalVersion = CheckAndFormatString( + configuration.AssemblyInformationalFormat, + semverFormatValues, + semverFormatValues.InformationalVersion, + "AssemblyInformationalVersion" + ); + + var assemblyFileSemVer = CheckAndFormatString( + configuration.AssemblyFileVersioningFormat, + semverFormatValues, + semverFormatValues.AssemblyFileSemVer, + "AssemblyFileVersioningFormat" + ); + + var assemblySemVer = CheckAndFormatString( + configuration.AssemblyVersioningFormat, + semverFormatValues, + semverFormatValues.AssemblySemVer, + "AssemblyVersioningFormat" + ); + + return new( semverFormatValues.Major, semverFormatValues.Minor, semverFormatValues.Patch, semverFormatValues.BuildMetaData, - semverFormatValues.BuildMetaDataPadded, semverFormatValues.FullBuildMetaData, semverFormatValues.BranchName, semverFormatValues.EscapedBranchName, @@ -77,8 +50,6 @@ public VersionVariables GetVariablesFor(SemanticVersion semanticVersion, Effecti semverFormatValues.ShortSha, semverFormatValues.MajorMinorPatch, semverFormatValues.SemVer, - semverFormatValues.LegacySemVer, - semverFormatValues.LegacySemVerPadded, semverFormatValues.FullSemVer, assemblySemVer, assemblyFileSemVer, @@ -90,44 +61,10 @@ public VersionVariables GetVariablesFor(SemanticVersion semanticVersion, Effecti semverFormatValues.WeightedPreReleaseNumber, informationalVersion, semverFormatValues.CommitDate, - semverFormatValues.NuGetVersion, - semverFormatValues.NuGetVersionV2, - semverFormatValues.NuGetPreReleaseTag, - semverFormatValues.NuGetPreReleaseTagV2, semverFormatValues.VersionSourceSha, semverFormatValues.CommitsSinceVersionSource, - semverFormatValues.CommitsSinceVersionSourcePadded, - semverFormatValues.UncommittedChanges); - - return variables; - } - - private static void PromoteNumberOfCommitsToTagNumber(SemanticVersion semanticVersion) - { - if (semanticVersion.PreReleaseTag != null && semanticVersion.BuildMetaData != null) - { - // For continuous deployment the commits since tag gets promoted to the pre-release number - if (!semanticVersion.BuildMetaData.CommitsSinceTag.HasValue) - { - semanticVersion.PreReleaseTag.Number = null; - semanticVersion.BuildMetaData.CommitsSinceVersionSource = 0; - } - else - { - // Number of commits since last tag should be added to PreRelease number if given. Remember to deduct automatic version bump. - if (semanticVersion.PreReleaseTag.Number.HasValue) - { - semanticVersion.PreReleaseTag.Number += semanticVersion.BuildMetaData.CommitsSinceTag - 1; - } - else - { - semanticVersion.PreReleaseTag.Number = semanticVersion.BuildMetaData.CommitsSinceTag; - semanticVersion.PreReleaseTag.PromotedFromCommits = true; - } - semanticVersion.BuildMetaData.CommitsSinceVersionSource = semanticVersion.BuildMetaData.CommitsSinceTag.Value; - semanticVersion.BuildMetaData.CommitsSinceTag = null; // why is this set to null ? - } - } + semverFormatValues.UncommittedChanges + ); } private string? CheckAndFormatString(string? formatString, T source, string? defaultValue, string formatVarName) @@ -140,8 +77,6 @@ private static void PromoteNumberOfCommitsToTagNumber(SemanticVersion semanticVe } else { - WarnIfUsingObsoleteFormatValues(formatString); - try { formattedString = formatString.FormatWith(source, this.environment).RegexReplace("[^0-9A-Za-z-.+]", "-"); @@ -154,15 +89,4 @@ private static void PromoteNumberOfCommitsToTagNumber(SemanticVersion semanticVe return formattedString; } - - private void WarnIfUsingObsoleteFormatValues(string formatString) - { -#pragma warning disable CS0618 // Type or member is obsolete - const string obsoletePropertyName = nameof(SemanticVersionFormatValues.DefaultInformationalVersion); -#pragma warning restore CS0618 // Type or member is obsolete - if (formatString.Contains($"{{{obsoletePropertyName}}}")) - { - this.log.Write(LogLevel.Warn, $"Use format variable '{nameof(SemanticVersionFormatValues.InformationalVersion)}' instead of '{obsoletePropertyName}' which is obsolete and will be removed in a future release."); - } - } } diff --git a/src/GitVersion.Core/VersionCalculation/VersionCalculationModule.cs b/src/GitVersion.Core/VersionCalculation/VersionCalculationModule.cs index 4b6f93e908..363f39584a 100644 --- a/src/GitVersion.Core/VersionCalculation/VersionCalculationModule.cs +++ b/src/GitVersion.Core/VersionCalculation/VersionCalculationModule.cs @@ -10,9 +10,11 @@ public void RegisterTypes(IServiceCollection services) services.AddModule(new VersionStrategyModule()); services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); } } diff --git a/src/GitVersion.Core/VersionCalculation/VersionCalculators/ContinuousDeliveryVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/VersionCalculators/ContinuousDeliveryVersionCalculator.cs new file mode 100644 index 0000000000..91098dae31 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionCalculators/ContinuousDeliveryVersionCalculator.cs @@ -0,0 +1,42 @@ +using GitVersion.Common; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +internal sealed class ContinuousDeliveryVersionCalculator( + ILog log, IRepositoryStore repositoryStore, Lazy versionContext) + : VersionCalculatorBase(log, repositoryStore, versionContext), IDeploymentModeCalculator +{ + public SemanticVersion Calculate(SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + using (this.log.IndentLog("Using continuous delivery workflow to calculate the incremented version.")) + { + var preReleaseTag = semanticVersion.PreReleaseTag; + if (!preReleaseTag.HasTag() || !preReleaseTag.Number.HasValue) + { + throw new WarningException("Continuous delivery requires a pre-release tag."); + } + + return CalculateInternal(semanticVersion, baseVersionSource); + } + } + + private SemanticVersion CalculateInternal(SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + var buildMetaData = CreateVersionBuildMetaData(baseVersionSource); + + return new SemanticVersion(semanticVersion) + { + PreReleaseTag = new SemanticVersionPreReleaseTag(semanticVersion.PreReleaseTag) + { + Number = semanticVersion.PreReleaseTag.Number!.Value + buildMetaData.CommitsSinceTag - 1 + }, + BuildMetaData = new SemanticVersionBuildMetaData(buildMetaData) + { + CommitsSinceVersionSource = buildMetaData.CommitsSinceTag!.Value, + CommitsSinceTag = null + } + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionCalculators/ContinuousDeploymentVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/VersionCalculators/ContinuousDeploymentVersionCalculator.cs new file mode 100644 index 0000000000..eb8bcc3acc --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionCalculators/ContinuousDeploymentVersionCalculator.cs @@ -0,0 +1,33 @@ +using GitVersion.Common; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +internal sealed class ContinuousDeploymentVersionCalculator( + ILog log, IRepositoryStore repositoryStore, Lazy versionContext) + : VersionCalculatorBase(log, repositoryStore, versionContext), IDeploymentModeCalculator +{ + public SemanticVersion Calculate(SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + using (this.log.IndentLog("Using continuous deployment workflow to calculate the incremented version.")) + { + return CalculateInternal(semanticVersion, baseVersionSource); + } + } + + private SemanticVersion CalculateInternal(SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + var buildMetaData = CreateVersionBuildMetaData(baseVersionSource); + + return new SemanticVersion(semanticVersion) + { + PreReleaseTag = SemanticVersionPreReleaseTag.Empty, + BuildMetaData = new SemanticVersionBuildMetaData(buildMetaData) + { + CommitsSinceVersionSource = buildMetaData.CommitsSinceTag!.Value, + CommitsSinceTag = null + } + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionCalculators/ManualDeploymentVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/VersionCalculators/ManualDeploymentVersionCalculator.cs new file mode 100644 index 0000000000..537ee7b360 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionCalculators/ManualDeploymentVersionCalculator.cs @@ -0,0 +1,28 @@ +using GitVersion.Common; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +internal sealed class ManualDeploymentVersionCalculator( + ILog log, IRepositoryStore repositoryStore, Lazy versionContext) + : VersionCalculatorBase(log, repositoryStore, versionContext), IDeploymentModeCalculator +{ + public SemanticVersion Calculate(SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + using (this.log.IndentLog("Using manual deployment workflow to calculate the incremented version.")) + { + return CalculateInternal(semanticVersion, baseVersionSource); + } + } + + private SemanticVersion CalculateInternal(SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + var buildMetaData = CreateVersionBuildMetaData(baseVersionSource); + + return new SemanticVersion(semanticVersion) + { + BuildMetaData = buildMetaData + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionCalculators/NextVersionCalculator.cs b/src/GitVersion.Core/VersionCalculation/VersionCalculators/NextVersionCalculator.cs new file mode 100644 index 0000000000..2c14c3ba54 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionCalculators/NextVersionCalculator.cs @@ -0,0 +1,301 @@ +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using GitVersion.Configuration; +using GitVersion.Core; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +internal class NextVersionCalculator( + ILog log, + Lazy versionContext, + IEnumerable deploymentModeCalculators, + IEnumerable versionStrategies, + IEffectiveBranchConfigurationFinder effectiveBranchConfigurationFinder, + ITaggedSemanticVersionService taggedSemanticVersionService) + : INextVersionCalculator +{ + private readonly ILog log = log.NotNull(); + private readonly Lazy versionContext = versionContext.NotNull(); + private readonly IVersionStrategy[] versionStrategies = versionStrategies.NotNull().ToArray(); + private readonly IEffectiveBranchConfigurationFinder effectiveBranchConfigurationFinder = effectiveBranchConfigurationFinder.NotNull(); + + private GitVersionContext Context => this.versionContext.Value; + + public virtual SemanticVersion FindVersion() + { + this.log.Info($"Running against branch: {Context.CurrentBranch} ({Context.CurrentCommit.ToString() ?? "-"})"); + + var branchConfiguration = Context.Configuration.GetBranchConfiguration(Context.CurrentBranch); + EffectiveConfiguration effectiveConfiguration = new(Context.Configuration, branchConfiguration); + + bool someBranchRelatedPropertiesMightBeNotKnown = branchConfiguration.Increment == IncrementStrategy.Inherit; + + if (Context.IsCurrentCommitTagged && !someBranchRelatedPropertiesMightBeNotKnown && effectiveConfiguration.PreventIncrementWhenCurrentCommitTagged) + { + var allTaggedSemanticVersions = taggedSemanticVersionService.GetTaggedSemanticVersions( + branch: Context.CurrentBranch, + configuration: Context.Configuration, + label: null, + notOlderThan: Context.CurrentCommit.When, + taggedSemanticVersion: effectiveConfiguration.GetTaggedSemanticVersion() + ); + var taggedSemanticVersionsOfCurrentCommit = allTaggedSemanticVersions[Context.CurrentCommit].ToList(); + + if (TryGetSemanticVersion(effectiveConfiguration, taggedSemanticVersionsOfCurrentCommit, out var value)) + { + return value; + } + } + + NextVersion nextVersion = CalculateNextVersion(Context.CurrentBranch, Context.Configuration); + + if (Context.IsCurrentCommitTagged && someBranchRelatedPropertiesMightBeNotKnown + && nextVersion.Configuration.PreventIncrementWhenCurrentCommitTagged) + { + var allTaggedSemanticVersions = taggedSemanticVersionService.GetTaggedSemanticVersions( + branch: Context.CurrentBranch, + configuration: Context.Configuration, + label: null, + notOlderThan: Context.CurrentCommit.When, + taggedSemanticVersion: nextVersion.Configuration.GetTaggedSemanticVersion() + ); + var taggedSemanticVersionsOfCurrentCommit = allTaggedSemanticVersions[Context.CurrentCommit].ToList(); + + if (TryGetSemanticVersion(nextVersion.Configuration, taggedSemanticVersionsOfCurrentCommit, out var value)) + { + return value; + } + } + + var semanticVersion = CalculateSemanticVersion( + deploymentMode: nextVersion.Configuration.DeploymentMode, + semanticVersion: nextVersion.IncrementedVersion, + baseVersionSource: nextVersion.BaseVersion.BaseVersionSource + ); + + var ignore = Context.Configuration.Ignore; + var alternativeSemanticVersion = taggedSemanticVersionService.GetTaggedSemanticVersionsOfBranch( + branch: nextVersion.BranchConfiguration.Branch, + tagPrefix: Context.Configuration.TagPrefix, + format: Context.Configuration.SemanticVersionFormat, + ignore: Context.Configuration.Ignore, + notOlderThan: Context.CurrentCommit.When + ).Where(element => element.Key.When <= Context.CurrentCommit.When + && !(element.Key.When <= ignore.Before) && !ignore.Shas.Contains(element.Key.Sha) + ).SelectMany(element => element).Max()?.Value; + + if (alternativeSemanticVersion is not null + && semanticVersion.IsLessThan(alternativeSemanticVersion, includePreRelease: false)) + { + semanticVersion = new SemanticVersion(semanticVersion) + { + Major = alternativeSemanticVersion.Major, + Minor = alternativeSemanticVersion.Minor, + Patch = alternativeSemanticVersion.Patch + }; + } + + return semanticVersion; + } + + private bool TryGetSemanticVersion( + EffectiveConfiguration effectiveConfiguration, + IReadOnlyCollection taggedSemanticVersionsOfCurrentCommit, + [NotNullWhen(true)] out SemanticVersion? result) + { + result = null; + + string? label = effectiveConfiguration.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + SemanticVersionWithTag? currentCommitTaggedVersion = taggedSemanticVersionsOfCurrentCommit + .Where(element => element.Value.IsMatchForBranchSpecificLabel(label)).Max(); + + if (currentCommitTaggedVersion is not null) + { + SemanticVersionBuildMetaData semanticVersionBuildMetaData = new( + versionSourceSha: Context.CurrentCommit.Sha, + commitsSinceTag: null, + branch: Context.CurrentBranch.Name.Friendly, + commitSha: Context.CurrentCommit.Sha, + commitShortSha: Context.CurrentCommit.Id.ToString(7), + commitDate: Context.CurrentCommit.When, + numberOfUnCommittedChanges: Context.NumberOfUncommittedChanges + ); + + SemanticVersionPreReleaseTag preReleaseTag = currentCommitTaggedVersion.Value.PreReleaseTag; + if (effectiveConfiguration.DeploymentMode == DeploymentMode.ContinuousDeployment) + { + preReleaseTag = SemanticVersionPreReleaseTag.Empty; + } + + result = new SemanticVersion(currentCommitTaggedVersion.Value) + { + PreReleaseTag = preReleaseTag, + BuildMetaData = semanticVersionBuildMetaData + }; + } + + return result is not null; + } + + private SemanticVersion CalculateSemanticVersion( + DeploymentMode deploymentMode, SemanticVersion semanticVersion, ICommit? baseVersionSource) + { + IDeploymentModeCalculator deploymentModeCalculator = deploymentMode switch + { + DeploymentMode.ManualDeployment => deploymentModeCalculators.SingleOfType(), + DeploymentMode.ContinuousDelivery => deploymentModeCalculators.SingleOfType(), + DeploymentMode.ContinuousDeployment => deploymentModeCalculators.SingleOfType(), + _ => throw new InvalidEnumArgumentException(nameof(deploymentMode), (int)deploymentMode, typeof(DeploymentMode)) + }; + return deploymentModeCalculator.Calculate(semanticVersion, baseVersionSource); + } + + private NextVersion CalculateNextVersion(IBranch branch, IGitVersionConfiguration configuration) + { + var nextVersions = GetNextVersions(branch, configuration); + log.Separator(); + + var maxVersion = nextVersions.Max() + ?? throw new GitVersionException("No base versions determined on the current branch."); + + ICommit? latestBaseVersionSource; + + var matchingVersionsOnceIncremented = nextVersions + .Where( + element => element.BaseVersion.BaseVersionSource != null + && element.IncrementedVersion == maxVersion.IncrementedVersion + ).ToArray(); + if (matchingVersionsOnceIncremented.Length > 1) + { + var latestVersion = matchingVersionsOnceIncremented.Aggregate(CompareVersions); + latestBaseVersionSource = latestVersion.BaseVersion.BaseVersionSource; + maxVersion = latestVersion; + log.Info( + $"Found multiple base versions which will produce the same SemVer ({maxVersion.IncrementedVersion}), " + + $"taking latest source for commit counting ({latestVersion.BaseVersion.Source})"); + } + else + { + IEnumerable filteredVersions = nextVersions; + if (!maxVersion.IncrementedVersion.PreReleaseTag.HasTag()) + { + // If the maximal version has no pre-release tag defined than we want to determine just the latest previous + // base source which are not coming from pre-release tag. + filteredVersions = filteredVersions.Where(v => !v.BaseVersion.SemanticVersion.PreReleaseTag.HasTag()); + } + + var versions = filteredVersions as NextVersion[] ?? filteredVersions.ToArray(); + var version = versions + .Where(v => v.BaseVersion.BaseVersionSource != null) + .OrderByDescending(v => v.IncrementedVersion) + .ThenByDescending(v => v.BaseVersion.BaseVersionSource?.When) + .FirstOrDefault(); + + version ??= versions.Where(v => v.BaseVersion.BaseVersionSource == null) + .OrderByDescending(v => v.IncrementedVersion) + .First(); + latestBaseVersionSource = version.BaseVersion.BaseVersionSource; + } + + BaseVersion calculatedBase = new() + { + Operand = new BaseVersionOperand() + { + Source = maxVersion.BaseVersion.Source, + BaseVersionSource = latestBaseVersionSource, + SemanticVersion = maxVersion.BaseVersion.SemanticVersion + } + }; + + log.Info($"Base version used: {calculatedBase}"); + log.Separator(); + + return new(maxVersion.IncrementedVersion, calculatedBase, maxVersion.BranchConfiguration); + } + + private static NextVersion CompareVersions(NextVersion version1, NextVersion version2) + { + if (version1.BaseVersion.BaseVersionSource == null) + return version2; + + if (version2.BaseVersion.BaseVersionSource == null) + return version1; + + return version1.BaseVersion.BaseVersionSource.When >= version2.BaseVersion.BaseVersionSource.When + ? version1 + : version2; + } + + private IReadOnlyCollection GetNextVersions(IBranch branch, IGitVersionConfiguration configuration) + { + using (log.IndentLog("Fetching the base versions for version calculation...")) + { + if (branch.Tip == null) + throw new GitVersionException("No commits found on the current branch."); + + return GetNextVersionsInternal().ToList(); + } + + IEnumerable GetNextVersionsInternal() + { + var effectiveBranchConfigurations = this.effectiveBranchConfigurationFinder.GetConfigurations(branch, configuration).ToArray(); + foreach (var effectiveBranchConfiguration in effectiveBranchConfigurations) + { + this.log.Info($"Calculating base versions for '{effectiveBranchConfiguration.Branch.Name}'"); + + var strategies = this.versionStrategies.ToList(); + var fallbackVersionStrategy = strategies.Find(element => element is FallbackVersionStrategy); + if (fallbackVersionStrategy is not null) + { + strategies.Remove(fallbackVersionStrategy); + strategies.Add(fallbackVersionStrategy); + } + + var atLeastOneBaseVersionReturned = false; + foreach (var versionStrategy in strategies) + { + if (atLeastOneBaseVersionReturned && versionStrategy is FallbackVersionStrategy) continue; + + using (this.log.IndentLog($"[Using '{versionStrategy.GetType().Name}' strategy]")) + { + foreach (var baseVersion in versionStrategy.GetBaseVersions(effectiveBranchConfiguration)) + { + log.Info(baseVersion.ToString()); + if (IncludeVersion(baseVersion, configuration.Ignore)) + { + atLeastOneBaseVersionReturned = true; + + yield return new NextVersion( + incrementedVersion: baseVersion.GetIncrementedVersion(), + baseVersion: baseVersion, + configuration: effectiveBranchConfiguration + ); + } + } + } + } + } + } + } + + private bool IncludeVersion(IBaseVersion baseVersion, IIgnoreConfiguration ignoreConfiguration) + { + foreach (var versionFilter in ignoreConfiguration.ToFilters()) + { + if (versionFilter.Exclude(baseVersion, out var reason)) + { + if (reason != null) + { + log.Info(reason); + } + + return false; + } + } + + return true; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionCalculators/VersionCalculatorBase.cs b/src/GitVersion.Core/VersionCalculation/VersionCalculators/VersionCalculatorBase.cs new file mode 100644 index 0000000000..a37ece76d8 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionCalculators/VersionCalculatorBase.cs @@ -0,0 +1,39 @@ +using GitVersion.Common; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +internal abstract class VersionCalculatorBase( + ILog log, IRepositoryStore repositoryStore, Lazy versionContext) +{ + protected readonly ILog log = log.NotNull(); + protected readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly Lazy versionContext = versionContext.NotNull(); + + protected GitVersionContext Context => this.versionContext.Value; + + protected SemanticVersionBuildMetaData CreateVersionBuildMetaData(ICommit? baseVersionSource) + { + var commitLogs = this.repositoryStore.GetCommitLog( + baseVersionSource: baseVersionSource, + currentCommit: Context.CurrentCommit, + ignore: Context.Configuration.Ignore + ); + + int commitsSinceTag = commitLogs.Count; + this.log.Info($"{commitsSinceTag} commits found between {baseVersionSource} and {Context.CurrentCommit}"); + + var shortSha = Context.CurrentCommit.Id.ToString(7); + return new SemanticVersionBuildMetaData( + versionSourceSha: baseVersionSource?.Sha, + commitsSinceTag: commitsSinceTag, + branch: Context.CurrentBranch.Name.Friendly, + commitSha: Context.CurrentCommit.Sha, + commitShortSha: shortSha, + commitDate: Context.CurrentCommit.When, + numberOfUnCommittedChanges: Context.NumberOfUncommittedChanges + ); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersion.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersion.cs new file mode 100644 index 0000000000..16aec5ce62 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersion.cs @@ -0,0 +1,91 @@ +using System.Diagnostics.CodeAnalysis; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation; + +public sealed record BaseVersion(BaseVersionOperand Operand) : IBaseVersion +{ + public BaseVersion() : this(new BaseVersionOperand()) + { + } + + public BaseVersion(string source, SemanticVersion semanticVersion, ICommit? baseVersionSource = null) + : this(new BaseVersionOperand(source, semanticVersion, baseVersionSource)) + { + } + + public string Source => (Operator?.Source).IsNullOrEmpty() ? Operand.Source : Operator.Source; + + public SemanticVersion SemanticVersion => Operand.SemanticVersion; + + public ICommit? BaseVersionSource => Operator?.BaseVersionSource ?? Operand.BaseVersionSource; + + [MemberNotNullWhen(true, nameof(Operator))] + public bool ShouldIncrement => Operator is not null; + + public BaseVersionOperand Operand { get; init; } = Operand.NotNull(); + + public BaseVersionOperator? Operator { get; init; } + + public SemanticVersion GetIncrementedVersion() + { + var result = SemanticVersion; + + if (ShouldIncrement) + { + result = result.Increment( + increment: Operator.Increment, + label: Operator.Label, + forceIncrement: Operator.ForceIncrement, + Operator.AlternativeSemanticVersion + ); + } + + return result; + } + + public override string ToString() + { + var commitSource = BaseVersionSource?.Id.ToString(7) ?? "External"; + + StringBuilder stringBuilder = new(); + if (ShouldIncrement) + { + stringBuilder.Append($"{Source}: "); + stringBuilder.Append(Operator.ForceIncrement ? "Force version increment " : "Version increment "); + + if (SemanticVersion is not null) + stringBuilder.Append($"'{SemanticVersion:f}' "); + + stringBuilder.Append($"+semver '{Operator.Increment}'"); + + if (Operator.Label is null) + { + stringBuilder.Append(" with no label"); + } + else + { + stringBuilder.Append($" with label '{Operator.Label}'"); + } + } + else + { + stringBuilder.Append($"{Source}: Take '{SemanticVersion:f}'"); + } + + if (BaseVersionSource is not null) + stringBuilder.Append($" based on commit '{commitSource}'."); + return stringBuilder.ToString(); + } + + internal BaseVersion Apply(BaseVersionOperator baseVersionOperator) + { + baseVersionOperator.NotNull(); + + return new BaseVersion(Source, GetIncrementedVersion(), BaseVersionSource) + { + Operator = baseVersionOperator + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersionOperand.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersionOperand.cs new file mode 100644 index 0000000000..0a46368ba5 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersionOperand.cs @@ -0,0 +1,28 @@ +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation; + +public sealed record BaseVersionOperand(string Source, SemanticVersion SemanticVersion, ICommit? BaseVersionSource = null) + : IBaseVersionIncrement +{ + public BaseVersionOperand() : this(string.Empty, SemanticVersion.Empty) + { + } + + public string Source { get; init; } = Source.NotNull(); + + public SemanticVersion SemanticVersion { get; init; } = SemanticVersion.NotNull(); + + public override string ToString() + { + StringBuilder stringBuilder = new(); + + stringBuilder.Append($"{Source}: Take '{SemanticVersion:f}'"); + + if (BaseVersionSource is not null) + stringBuilder.Append($" based on commit '{BaseVersionSource.Id.ToString(7)}'."); + + return stringBuilder.ToString(); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersionOperator.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersionOperator.cs new file mode 100644 index 0000000000..767dd7b83f --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/BaseVersionOperator.cs @@ -0,0 +1,45 @@ +using GitVersion.Git; + +namespace GitVersion.VersionCalculation; + +public sealed record BaseVersionOperator : IBaseVersionIncrement +{ + public string Source { get; init; } = string.Empty; + + public ICommit? BaseVersionSource { get; init; } + + public VersionField Increment { get; init; } + + public bool ForceIncrement { get; init; } + + public string? Label { get; init; } + + public SemanticVersion? AlternativeSemanticVersion { get; init; } + + public override string ToString() + { + StringBuilder stringBuilder = new(); + + stringBuilder.Append($"{Source}: "); + if (ForceIncrement) + stringBuilder.Append("Force version increment "); + else + { + stringBuilder.Append("Version increment "); + } + + stringBuilder.Append($"+semver '{Increment}'"); + + if (Label is null) + stringBuilder.Append(" with no label"); + else + { + stringBuilder.Append($" with label '{Label}'"); + } + + if (BaseVersionSource is not null) + stringBuilder.Append($" based on commit '{BaseVersionSource.Id.ToString(7)}'."); + + return stringBuilder.ToString(); + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/ConfiguredNextVersionVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/ConfiguredNextVersionVersionStrategy.cs new file mode 100644 index 0000000000..0cca57e4f3 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/ConfiguredNextVersionVersionStrategy.cs @@ -0,0 +1,52 @@ +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation; + +/// +/// Version is from NextVersion (the configuration value), unless the current commit is tagged. +/// BaseVersionSource is null. +/// Does not increment. +/// +internal sealed class ConfiguredNextVersionVersionStrategy(Lazy contextLazy) : IVersionStrategy +{ + private readonly Lazy contextLazy = contextLazy.NotNull(); + + private GitVersionContext Context => contextLazy.Value; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + { + configuration.NotNull(); + + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.ConfiguredNextVersion)) + yield break; + + var nextVersion = Context.Configuration.NextVersion; + if (!nextVersion.IsNullOrEmpty()) + { + var semanticVersion = SemanticVersion.Parse( + nextVersion, Context.Configuration.TagPrefix, Context.Configuration.SemanticVersionFormat + ); + var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + + if (semanticVersion.IsMatchForBranchSpecificLabel(label)) + { + BaseVersionOperator? operation = null; + if (!semanticVersion.IsPreRelease || label is not null && semanticVersion.PreReleaseTag.Name != label) + { + operation = new BaseVersionOperator() + { + Increment = VersionField.None, + ForceIncrement = false, + Label = label + }; + } + + yield return new BaseVersion("NextVersion in GitVersion configuration file", semanticVersion) + { + Operator = operation + }; + } + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/FallbacktVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/FallbacktVersionStrategy.cs new file mode 100644 index 0000000000..bdc8e2d377 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/FallbacktVersionStrategy.cs @@ -0,0 +1,64 @@ +using GitVersion.Configuration; +using GitVersion.Core; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation; + +/// +/// Version is extracted from all tags on the branch which are valid, and not newer than the current commit. +/// BaseVersionSource is the tag's commit. +/// Increments if the tag is not the current commit. +/// +internal sealed class FallbackVersionStrategy( + Lazy contextLazy, + IIncrementStrategyFinder incrementStrategyFinder, + ITaggedSemanticVersionService taggedSemanticVersionService) + : IVersionStrategy +{ + private readonly Lazy contextLazy = contextLazy.NotNull(); + private readonly IIncrementStrategyFinder incrementStrategyFinder = incrementStrategyFinder.NotNull(); + private readonly ITaggedSemanticVersionService taggedSemanticVersionService = taggedSemanticVersionService.NotNull(); + + private GitVersionContext Context => contextLazy.Value; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + => GetBaseVersionsInternal(configuration); + + private IEnumerable GetBaseVersionsInternal(EffectiveBranchConfiguration configuration) + { + configuration.NotNull(); + + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.Fallback)) + yield break; + + var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + + var baseVersionSource = taggedSemanticVersionService.GetTaggedSemanticVersions( + branch: Context.CurrentBranch, + configuration: Context.Configuration, + label: label, + notOlderThan: Context.CurrentCommit.When, + taggedSemanticVersion: configuration.Value.GetTaggedSemanticVersion() + ).Select(element => element.Key).FirstOrDefault(); + + var increment = incrementStrategyFinder.DetermineIncrementedField( + currentCommit: Context.CurrentCommit, + baseVersionSource: baseVersionSource, + shouldIncrement: true, + configuration: configuration.Value, + label: label + ); + + yield return new BaseVersion() + { + Operator = new BaseVersionOperator() + { + Source = "Fallback base version", + BaseVersionSource = baseVersionSource, + Increment = increment, + ForceIncrement = false, + Label = label + } + }; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/IBaseVersion.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/IBaseVersion.cs new file mode 100644 index 0000000000..d8c2c1c8f4 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/IBaseVersion.cs @@ -0,0 +1,6 @@ +namespace GitVersion.VersionCalculation; + +public interface IBaseVersion : IBaseVersionIncrement +{ + SemanticVersion SemanticVersion { get; } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/IBaseVersionIncrement.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/IBaseVersionIncrement.cs new file mode 100644 index 0000000000..02f53b7cd1 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/IBaseVersionIncrement.cs @@ -0,0 +1,10 @@ +using GitVersion.Git; + +namespace GitVersion.VersionCalculation; + +public interface IBaseVersionIncrement +{ + string Source { get; } + + ICommit? BaseVersionSource { get; } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs new file mode 100644 index 0000000000..2dd181c896 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MainlineVersionStrategy.cs @@ -0,0 +1,387 @@ +using GitVersion.Common; +using GitVersion.Configuration; +using GitVersion.Core; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.VersionCalculation.Mainline; +using GitVersion.VersionCalculation.Mainline.NonTrunk; +using GitVersion.VersionCalculation.Mainline.Trunk; + +namespace GitVersion.VersionCalculation; + +internal sealed class MainlineVersionStrategy( + Lazy contextLazy, + IRepositoryStore repositoryStore, + ITaggedSemanticVersionService taggedSemanticVersionService, + IIncrementStrategyFinder incrementStrategyFinder) + : IVersionStrategy +{ + private volatile int iterationCounter; + private readonly Lazy contextLazy = contextLazy.NotNull(); + private readonly ITaggedSemanticVersionService taggedSemanticVersionService = taggedSemanticVersionService.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly IIncrementStrategyFinder incrementStrategyFinder = incrementStrategyFinder.NotNull(); + + private GitVersionContext Context => contextLazy.Value; + + private static readonly IReadOnlyCollection TrunkContextPreEnricherCollection = + [ + new EnrichSemanticVersion(), + new EnrichIncrement() + ]; + private static readonly IReadOnlyCollection TrunkContextPostEnricherCollection = + [ + new RemoveSemanticVersion(), + new RemoveIncrement() + ]; + private static readonly IReadOnlyCollection TrunkIncrementerCollection = + [ + // Trunk + new CommitOnTrunk(), + + new CommitOnTrunkWithPreReleaseTag(), + new LastCommitOnTrunkWithPreReleaseTag(), + + new CommitOnTrunkWithStableTag(), + new LastCommitOnTrunkWithStableTag(), + + new MergeCommitOnTrunk(), + new LastMergeCommitOnTrunk(), + + new CommitOnTrunkBranchedToTrunk(), + new CommitOnTrunkBranchedToNonTrunk(), + + // NonTrunk + new FirstCommitOnRelease(), + + new CommitOnNonTrunk(), + new CommitOnNonTrunkWithPreReleaseTag(), + new LastCommitOnNonTrunkWithPreReleaseTag(), + + new CommitOnNonTrunkWithStableTag(), + new LastCommitOnNonTrunkWithStableTag(), + + new MergeCommitOnNonTrunk(), + new LastMergeCommitOnNonTrunk(), + + new CommitOnNonTrunkBranchedToTrunk(), + new CommitOnNonTrunkBranchedToNonTrunk() + ]; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + { + configuration.NotNull(); + + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.Mainline)) + yield break; + + var branchConfiguration = Context.Configuration.GetBranchConfiguration(Context.CurrentBranch); + + var iteration = CreateIteration( + branchName: Context.CurrentBranch.Name, + configuration: branchConfiguration + ); + + var commitsInReverseOrder = Context.Configuration.Ignore.Filter(Context.CurrentBranchCommits); + + TaggedSemanticVersions taggedSemanticVersion = TaggedSemanticVersions.OfBranch; + if (branchConfiguration.TrackMergeTarget == true) taggedSemanticVersion |= TaggedSemanticVersions.OfMergeTargets; + if (branchConfiguration.TracksReleaseBranches == true) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfReleaseBranches; + } + if (!(branchConfiguration.IsMainBranch == true || branchConfiguration.IsReleaseBranch == true)) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfMainBranches; + } + var taggedSemanticVersions = taggedSemanticVersionService.GetTaggedSemanticVersions( + branch: Context.CurrentBranch, + configuration: Context.Configuration, + label: null, + notOlderThan: Context.CurrentCommit.When, + taggedSemanticVersion: taggedSemanticVersion + ); + var targetLabel = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + IterateOverCommitsRecursive( + commitsInReverseOrder: commitsInReverseOrder, + iteration: iteration, + targetBranch: configuration.Branch, + targetLabel: targetLabel, + taggedSemanticVersions: taggedSemanticVersions + ); + + yield return DetermineBaseVersion(iteration, targetLabel, incrementStrategyFinder, Context.Configuration); + } + + private MainlineIteration CreateIteration( + ReferenceName branchName, IBranchConfiguration configuration, + MainlineIteration? parentIteration = null, MainlineCommit? parentCommit = null) + { + var iterationCount = Interlocked.Increment(ref iterationCounter); + return new MainlineIteration( + id: $"#{iterationCount}", + branchName: branchName, + configuration: configuration, + parentIteration: parentIteration, + parentCommit: parentCommit + ); + } + + private bool IterateOverCommitsRecursive( + IEnumerable commitsInReverseOrder, MainlineIteration iteration, IBranch targetBranch, string? targetLabel, + ILookup taggedSemanticVersions, HashSet? traversedCommits = null) + { + traversedCommits ??= []; + + bool returnTrueWhenTheIncrementIsKnown = false; + + var configuration = iteration.Configuration; + var branchName = iteration.BranchName; + var branch = repositoryStore.FindBranch(branchName); + + Lazy>> commitsWasBranchedFromLazy = new( + () => branch is null ? new Dictionary>() : GetCommitsWasBranchedFrom(branch) + ); + + foreach (var item in commitsInReverseOrder) + { + if (!traversedCommits.Add(item)) continue; + + if (commitsWasBranchedFromLazy.Value.TryGetValue(item, out var effectiveConfigurationsWasBranchedFrom)) + { + var effectiveConfigurationWasBranchedFrom = effectiveConfigurationsWasBranchedFrom[0]; + + if (configuration.IsMainBranch != true || effectiveConfigurationWasBranchedFrom.Value.IsMainBranch == true) + { + var excludeBranch = branch; + if (effectiveConfigurationsWasBranchedFrom.Any(element => + !element.Branch.Equals(effectiveConfigurationWasBranchedFrom.Branch) + && element.Branch.Equals(targetBranch))) + { + iteration.CreateCommit(null, targetBranch.Name, Context.Configuration.GetBranchConfiguration(targetBranch)); + } + configuration = effectiveConfigurationWasBranchedFrom.Value; + branchName = effectiveConfigurationWasBranchedFrom.Branch.Name; + + branch = repositoryStore.FindBranch(branchName); + + commitsWasBranchedFromLazy = new Lazy>> + (() => branch is null ? new Dictionary>() + : GetCommitsWasBranchedFrom(branch, excludeBranch is null ? [] : [excludeBranch]) + ); + + TaggedSemanticVersions taggedSemanticVersion = TaggedSemanticVersions.OfBranch; + if ((configuration.TrackMergeTarget ?? Context.Configuration.TrackMergeTarget) == true) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfMergeTargets; + } + if ((configuration.TracksReleaseBranches ?? Context.Configuration.TracksReleaseBranches) == true) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfReleaseBranches; + } + if (!(configuration.IsMainBranch == true || configuration.IsReleaseBranch == true)) + { + taggedSemanticVersion |= TaggedSemanticVersions.OfMainBranches; + } + taggedSemanticVersions = taggedSemanticVersionService.GetTaggedSemanticVersions( + branch: effectiveConfigurationWasBranchedFrom.Branch, + configuration: Context.Configuration, + label: null, + notOlderThan: Context.CurrentCommit.When, + taggedSemanticVersion: taggedSemanticVersion + ); + } + } + + var commit = iteration.CreateCommit(item, branchName, configuration); + + var semanticVersions = taggedSemanticVersions[item].ToArray(); + commit.AddSemanticVersions(semanticVersions.Select(element => element.Value)); + + var label = targetLabel ?? new EffectiveConfiguration( + configuration: Context.Configuration, + branchConfiguration: configuration + ).GetBranchSpecificLabel(branchName, null); + + foreach (var semanticVersion in semanticVersions) + { + if (semanticVersion.Value.IsMatchForBranchSpecificLabel(label)) + { + if (configuration.Increment != IncrementStrategy.Inherit) + { + return true; + } + else + { + returnTrueWhenTheIncrementIsKnown = true; + } + } + } + + if (returnTrueWhenTheIncrementIsKnown && configuration.Increment != IncrementStrategy.Inherit) + { + return true; + } + + if (item.IsMergeCommit()) + { + Lazy> mergedCommitsInReverseOrderLazy = new( + () => incrementStrategyFinder.GetMergedCommits(item, 1, Context.Configuration.Ignore).Reverse().ToList() + ); + + if ((configuration.TrackMergeMessage ?? Context.Configuration.TrackMergeMessage) == true + && MergeMessage.TryParse(item, Context.Configuration, out var mergeMessage)) + { + if (mergeMessage.MergedBranch is not null) + { + var childConfiguration = Context.Configuration.GetBranchConfiguration(mergeMessage.MergedBranch); + var childBranchName = mergeMessage.MergedBranch; + + if (childConfiguration.IsMainBranch == true) + { + if (configuration.IsMainBranch == true) throw new NotImplementedException(); + + mergedCommitsInReverseOrderLazy = new( + () => incrementStrategyFinder.GetMergedCommits(item, 0, Context.Configuration.Ignore).Reverse().ToList() + ); + childConfiguration = configuration; + childBranchName = iteration.BranchName; + } + + var childIteration = CreateIteration( + branchName: childBranchName, + configuration: childConfiguration, + parentIteration: iteration, + parentCommit: commit + ); + + var done = IterateOverCommitsRecursive( + commitsInReverseOrder: mergedCommitsInReverseOrderLazy.Value, + iteration: childIteration, + targetBranch: targetBranch, + targetLabel: targetLabel, + traversedCommits: traversedCommits, + taggedSemanticVersions: taggedSemanticVersions + ); + + commit.AddChildIteration(childIteration); + if (done) return true; + } + + traversedCommits.AddRange(mergedCommitsInReverseOrderLazy.Value); + } + } + } + return false; + } + + private IReadOnlyDictionary> GetCommitsWasBranchedFrom( + IBranch branch, params IBranch[] excludedBranches) + { + Dictionary> result = []; + + var branchCommits = repositoryStore.FindCommitBranchesBranchedFrom( + branch, Context.Configuration, excludedBranches: excludedBranches + ).ToList(); + + var branchCommitDictionary = branchCommits.ToDictionary( + element => element.Branch, element => element.Commit + ); + foreach (var item in branchCommitDictionary.Keys) + { + var branchConfiguration = Context.Configuration.GetBranchConfiguration(item); + + var key = branchCommitDictionary[item]; + if (result.TryGetValue(key, out var value)) + { + if (branchConfiguration is { Increment: IncrementStrategy.Inherit, IsMainBranch: null }) + { + throw new InvalidOperationException(); + } + + if ((branchConfiguration.IsMainBranch ?? Context.Configuration.IsMainBranch) == true) + { + foreach (var _ in value.ToArray()) + { + value.Add(new(item, branchConfiguration)); + } + } + } + else + { + result.Add(key: key, value: [new ValueTuple(item, branchConfiguration)]); + } + } + + // If a main branch existing we need to ensure that it will be present at the first position in the list. + foreach (var item in result) + { + result[item.Key] = item.Value + .OrderByDescending(element => (element.Configuration.IsMainBranch ?? Context.Configuration.IsMainBranch) == true) + .ToList(); + } + return result; + } + + private static BaseVersion DetermineBaseVersion(MainlineIteration iteration, string? targetLabel, + IIncrementStrategyFinder incrementStrategyFinder, IGitVersionConfiguration configuration) + => DetermineBaseVersionRecursive(iteration, targetLabel, incrementStrategyFinder, configuration); + + internal static BaseVersion DetermineBaseVersionRecursive(MainlineIteration iteration, string? targetLabel, + IIncrementStrategyFinder incrementStrategyFinder, IGitVersionConfiguration configuration) + { + iteration.NotNull(); + + var incrementSteps = GetIncrements(iteration, targetLabel, incrementStrategyFinder, configuration).ToArray(); + + BaseVersion? result = null; + foreach (var baseVersionIncrement in incrementSteps) + { + switch (baseVersionIncrement) + { + case BaseVersionOperand baseVersionOperand: + result = new BaseVersion(baseVersionOperand); + break; + case BaseVersionOperator baseVersionOperator: + result ??= new BaseVersion(); + result = result.Apply(baseVersionOperator); + break; + case BaseVersion baseVersion: + result = baseVersion; + break; + } + } + return result ?? throw new InvalidOperationException(); + } + + private static IEnumerable GetIncrements(MainlineIteration iteration, string? targetLabel, + IIncrementStrategyFinder incrementStrategyFinder, IGitVersionConfiguration configuration) + { + MainlineContext context = new(incrementStrategyFinder, configuration) + { + TargetLabel = targetLabel + }; + + foreach (var commit in iteration.Commits) + { + foreach (var item in TrunkContextPreEnricherCollection) + { + item.Enrich(iteration, commit, context); + } + + foreach (var incrementer in TrunkIncrementerCollection + .Where(element => element.MatchPrecondition(iteration, commit, context))) + { + foreach (var item in incrementer.GetIncrements(iteration, commit, context)) + { + yield return item; + } + } + + foreach (var item in TrunkContextPostEnricherCollection) + { + item.Enrich(iteration, commit, context); + } + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs new file mode 100644 index 0000000000..7dfe751dc3 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/MergeMessageVersionStrategy.cs @@ -0,0 +1,72 @@ +using GitVersion.Common; +using GitVersion.Configuration; +using GitVersion.Extensions; +using GitVersion.Git; +using GitVersion.Logging; + +namespace GitVersion.VersionCalculation; + +/// +/// Version is extracted from older commits' merge messages. +/// BaseVersionSource is the commit where the message was found. +/// Increments if PreventIncrementOfMergedBranchVersion (from the branch configuration) is false. +/// +internal sealed class MergeMessageVersionStrategy(ILog log, Lazy contextLazy, + IRepositoryStore repositoryStore, IIncrementStrategyFinder incrementStrategyFinder) + : IVersionStrategy +{ + private readonly ILog log = log.NotNull(); + private readonly Lazy contextLazy = contextLazy.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly IIncrementStrategyFinder incrementStrategyFinder = incrementStrategyFinder.NotNull(); + + private GitVersionContext Context => contextLazy.Value; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + => GetBaseVersionsInternal(configuration).Take(5); + + private IEnumerable GetBaseVersionsInternal(EffectiveBranchConfiguration configuration) + { + configuration.NotNull(); + + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.MergeMessage) + || !configuration.Value.TrackMergeMessage) + yield break; + + foreach (var commit in configuration.Value.Ignore.Filter(Context.CurrentBranchCommits)) + { + if (MergeMessage.TryParse(commit, Context.Configuration, out var mergeMessage) + && mergeMessage.Version is not null + && Context.Configuration.IsReleaseBranch(mergeMessage.MergedBranch!)) + { + this.log.Info($"Found commit [{commit}] matching merge message format: {mergeMessage.FormatName}"); + + var baseVersionSource = commit; + if (commit.IsMergeCommit()) + { + baseVersionSource = this.repositoryStore.FindMergeBase(commit.Parents[0], commit.Parents[1]); + } + + var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + var increment = configuration.Value.PreventIncrementOfMergedBranch + ? VersionField.None : incrementStrategyFinder.DetermineIncrementedField( + currentCommit: Context.CurrentCommit, + baseVersionSource: baseVersionSource, + shouldIncrement: true, + configuration: configuration.Value, + label: label + ); + + yield return new BaseVersion($"Merge message '{commit.Message.Trim()}'", mergeMessage.Version) + { + Operator = new() + { + Increment = increment, + ForceIncrement = false, + Label = label + } + }; + } + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/TaggedCommitVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/TaggedCommitVersionStrategy.cs new file mode 100644 index 0000000000..c13012deb2 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/TaggedCommitVersionStrategy.cs @@ -0,0 +1,76 @@ +using GitVersion.Configuration; +using GitVersion.Core; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation; + +/// +/// Version is extracted from all tags on the branch which are valid, and not newer than the current commit. +/// BaseVersionSource is the tag's commit. +/// Increments if the tag is not the current commit. +/// +internal sealed class TaggedCommitVersionStrategy( + Lazy contextLazy, + ITaggedSemanticVersionService taggedSemanticVersionService, + IIncrementStrategyFinder incrementStrategyFinder) + : IVersionStrategy +{ + private readonly ITaggedSemanticVersionService taggedSemanticVersionService = taggedSemanticVersionService.NotNull(); + private readonly Lazy contextLazy = contextLazy.NotNull(); + private readonly IIncrementStrategyFinder incrementStrategyFinder = incrementStrategyFinder.NotNull(); + + private GitVersionContext Context => contextLazy.Value; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + => GetBaseVersionsInternal(configuration); + + private IEnumerable GetBaseVersionsInternal(EffectiveBranchConfiguration configuration) + { + configuration.NotNull(); + + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.TaggedCommit)) + yield break; + + var taggedSemanticVersions = taggedSemanticVersionService.GetTaggedSemanticVersions( + branch: Context.CurrentBranch, + configuration: Context.Configuration, + label: null, + notOlderThan: Context.CurrentCommit.When, + taggedSemanticVersion: configuration.Value.GetTaggedSemanticVersion() + ).SelectMany(elements => elements).Distinct().ToArray(); + + var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + + List alternativeSemanticVersionsWithTag = []; + foreach (var semanticVersionWithTag in taggedSemanticVersions) + { + if (!semanticVersionWithTag.Value.IsMatchForBranchSpecificLabel(label)) + { + alternativeSemanticVersionsWithTag.Add(semanticVersionWithTag); + continue; + } + + var baseVersionSource = semanticVersionWithTag.Tag.Commit; + var increment = incrementStrategyFinder.DetermineIncrementedField( + currentCommit: Context.CurrentCommit, + baseVersionSource: baseVersionSource, + shouldIncrement: true, + configuration: configuration.Value, + label: label + ); + + yield return new BaseVersion( + $"Git tag '{semanticVersionWithTag.Tag.Name.Friendly}'", semanticVersionWithTag.Value, baseVersionSource) + { + Operator = new BaseVersionOperator() + { + Increment = increment, + ForceIncrement = false, + Label = label, + AlternativeSemanticVersion = alternativeSemanticVersionsWithTag.Max()?.Value + } + }; + alternativeSemanticVersionsWithTag.Clear(); + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/TrackReleaseBranchesVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/TrackReleaseBranchesVersionStrategy.cs new file mode 100644 index 0000000000..ac2f1291a3 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/TrackReleaseBranchesVersionStrategy.cs @@ -0,0 +1,77 @@ +using System.Diagnostics.CodeAnalysis; +using GitVersion.Common; +using GitVersion.Configuration; +using GitVersion.Core; +using GitVersion.Extensions; +using GitVersion.Git; + +namespace GitVersion.VersionCalculation; + +internal sealed class TrackReleaseBranchesVersionStrategy( + Lazy contextLazy, + IRepositoryStore repositoryStore, + IBranchRepository branchRepository, + IIncrementStrategyFinder incrementStrategyFinder) + : IVersionStrategy +{ + private readonly Lazy contextLazy = contextLazy.NotNull(); + private readonly IRepositoryStore repositoryStore = repositoryStore.NotNull(); + private readonly IBranchRepository branchRepository = branchRepository.NotNull(); + private readonly IIncrementStrategyFinder incrementStrategyFinder = incrementStrategyFinder.NotNull(); + private readonly VersionInBranchNameVersionStrategy releaseVersionStrategy = new(contextLazy); + + private GitVersionContext Context => contextLazy.Value; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + { + configuration.NotNull(); + + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.TrackReleaseBranches)) + yield break; + + if (configuration.Value.TracksReleaseBranches) + { + foreach (var releaseBranche in branchRepository.GetReleaseBranches(Context.Configuration)) + { + if (TryGetBaseVersion(releaseBranche, configuration, out var baseVersion)) + { + yield return baseVersion; + } + } + } + } + + private bool TryGetBaseVersion( + IBranch releaseBranch, EffectiveBranchConfiguration configuration, [NotNullWhen(true)] out BaseVersion? result) + { + result = null; + + var releaseBranchConfiguration = Context.Configuration.GetEffectiveBranchConfiguration(releaseBranch); + if (this.releaseVersionStrategy.TryGetBaseVersion(releaseBranchConfiguration, out var baseVersion)) + { + // Find the commit where the child branch was created. + var baseVersionSource = this.repositoryStore.FindMergeBase(releaseBranch, Context.CurrentBranch); + var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, null); + var increment = incrementStrategyFinder.DetermineIncrementedField( + currentCommit: Context.CurrentCommit, + baseVersionSource: baseVersionSource, + shouldIncrement: true, + configuration: configuration.Value, + label: label + ); + + result = new BaseVersion( + "Release branch exists -> " + baseVersion.Source, baseVersion.SemanticVersion, baseVersionSource) + { + Operator = new BaseVersionOperator() + { + Increment = increment, + ForceIncrement = false, + Label = label + } + }; + } + + return result is not null; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/VersionInBranchNameVersionStrategy.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/VersionInBranchNameVersionStrategy.cs new file mode 100644 index 0000000000..512b73c11e --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/VersionInBranchNameVersionStrategy.cs @@ -0,0 +1,65 @@ +using System.Diagnostics.CodeAnalysis; +using GitVersion.Configuration; +using GitVersion.Extensions; + +namespace GitVersion.VersionCalculation; + +/// +/// Version is extracted from the name of the branch. +/// BaseVersionSource is the commit where the branch was branched from its parent. +/// Does not increment. +/// +internal sealed class VersionInBranchNameVersionStrategy(Lazy contextLazy) : IVersionStrategy +{ + private readonly Lazy contextLazy = contextLazy.NotNull(); + + private GitVersionContext Context => contextLazy.Value; + + public IEnumerable GetBaseVersions(EffectiveBranchConfiguration configuration) + { + if (!Context.Configuration.VersionStrategy.HasFlag(VersionStrategies.VersionInBranchName)) + yield break; + + if (TryGetBaseVersion(configuration, out var baseVersion)) + { + yield return baseVersion; + } + } + + public bool TryGetBaseVersion(EffectiveBranchConfiguration configuration, [NotNullWhen(true)] out BaseVersion? baseVersion) + { + baseVersion = null; + + if (!configuration.Value.IsReleaseBranch) + return false; + + foreach (var branch in new[] { Context.CurrentBranch, configuration.Branch }) + { + if (branch.Name.TryGetSemanticVersion(out var result, configuration.Value.VersionInBranchRegex, + configuration.Value.TagPrefix, configuration.Value.SemanticVersionFormat)) + { + string? branchNameOverride = null; + if (!result.Name.IsNullOrEmpty() && (Context.CurrentBranch.Name.Equals(branch.Name) + || Context.Configuration.GetBranchConfiguration(Context.CurrentBranch.Name).Label is null)) + { + branchNameOverride = result.Name; + } + + var label = configuration.Value.GetBranchSpecificLabel(Context.CurrentBranch.Name, branchNameOverride); + + baseVersion = new BaseVersion("Version in branch name", result.Value) + { + Operator = new BaseVersionOperator() + { + Increment = VersionField.None, + ForceIncrement = false, + Label = label + } + }; + return true; + } + } + + return false; + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/VersionStrategyModule.cs b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/VersionStrategyModule.cs new file mode 100644 index 0000000000..23d0580365 --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionSearchStrategies/VersionStrategyModule.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.VersionCalculation; + +public class VersionStrategyModule : IGitVersionModule +{ + public void RegisterTypes(IServiceCollection services) + { + var versionStrategies = IGitVersionModule.FindAllDerivedTypes(Assembly.GetAssembly(GetType())) + .Where(x => x is { IsAbstract: false, IsInterface: false }); + + foreach (var versionStrategy in versionStrategies) + { + services.AddSingleton(typeof(IVersionStrategy), versionStrategy); + } + } +} diff --git a/src/GitVersion.Core/VersionCalculation/VersionStrategies.cs b/src/GitVersion.Core/VersionCalculation/VersionStrategies.cs new file mode 100644 index 0000000000..4fe020c87a --- /dev/null +++ b/src/GitVersion.Core/VersionCalculation/VersionStrategies.cs @@ -0,0 +1,14 @@ +namespace GitVersion.VersionCalculation; + +[Flags] +public enum VersionStrategies +{ + None = 0, + Fallback = 1, + ConfiguredNextVersion = 2, + MergeMessage = 4, + TaggedCommit = 8, + TrackReleaseBranches = 16, + VersionInBranchName = 32, + Mainline = 64 +} diff --git a/src/GitVersion.Core/VersionCalculation/VersioningMode.cs b/src/GitVersion.Core/VersionCalculation/VersioningMode.cs deleted file mode 100644 index d4f5b4d9fe..0000000000 --- a/src/GitVersion.Core/VersionCalculation/VersioningMode.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace GitVersion.VersionCalculation; - -public enum VersioningMode -{ - ContinuousDelivery, - ContinuousDeployment, - Mainline -} diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AssemblyInfoContext.cs b/src/GitVersion.Core/VersionConverters/AssemblyInfo/AssemblyInfoContext.cs deleted file mode 100644 index 1f9b3586a0..0000000000 --- a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AssemblyInfoContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GitVersion.VersionConverters.AssemblyInfo; - -public readonly struct AssemblyInfoContext : IConverterContext -{ - public AssemblyInfoContext(string workingDirectory, bool ensureAssemblyInfo, params string[] assemblyInfoFiles) - { - AssemblyInfoFiles = assemblyInfoFiles; - EnsureAssemblyInfo = ensureAssemblyInfo; - WorkingDirectory = workingDirectory; - } - - public string WorkingDirectory { get; } - public bool EnsureAssemblyInfo { get; } - public string[] AssemblyInfoFiles { get; } -} diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.cs b/src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.cs deleted file mode 100644 index be7fc098d4..0000000000 --- a/src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.cs +++ /dev/null @@ -1 +0,0 @@ -public static string {0} = "{1}"; diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/GitVersionInfoContext.cs b/src/GitVersion.Core/VersionConverters/GitVersionInfo/GitVersionInfoContext.cs deleted file mode 100644 index ddccc5b0ce..0000000000 --- a/src/GitVersion.Core/VersionConverters/GitVersionInfo/GitVersionInfoContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GitVersion.VersionConverters.GitVersionInfo; - -public readonly struct GitVersionInfoContext : IConverterContext -{ - public GitVersionInfoContext(string workingDirectory, string fileName, string fileExtension) - { - WorkingDirectory = workingDirectory; - FileName = fileName; - FileExtension = fileExtension; - } - - public string WorkingDirectory { get; } - public string FileName { get; } - public string FileExtension { get; } -} diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/GitVersionInfoGenerator.cs b/src/GitVersion.Core/VersionConverters/GitVersionInfo/GitVersionInfoGenerator.cs deleted file mode 100644 index e02971218e..0000000000 --- a/src/GitVersion.Core/VersionConverters/GitVersionInfo/GitVersionInfoGenerator.cs +++ /dev/null @@ -1,66 +0,0 @@ -using GitVersion.Extensions; -using GitVersion.Helpers; -using GitVersion.OutputVariables; - -namespace GitVersion.VersionConverters.GitVersionInfo; - -public interface IGitVersionInfoGenerator : IVersionConverter -{ -} - -public sealed class GitVersionInfoGenerator : IGitVersionInfoGenerator -{ - private readonly IFileSystem fileSystem; - private readonly TemplateManager templateManager; - - public GitVersionInfoGenerator(IFileSystem fileSystem) - { - this.fileSystem = fileSystem.NotNull(); - this.templateManager = new TemplateManager(TemplateType.GitVersionInfo); - } - - public void Execute(VersionVariables variables, GitVersionInfoContext context) - { - var fileName = context.FileName; - var directory = context.WorkingDirectory; - var filePath = PathHelper.Combine(directory, fileName); - - string? originalFileContents = null; - - if (File.Exists(filePath)) - { - originalFileContents = this.fileSystem.ReadAllText(filePath); - } - - var fileExtension = Path.GetExtension(filePath); - var template = this.templateManager.GetTemplateFor(fileExtension); - var addFormat = this.templateManager.GetAddFormatFor(fileExtension); - - if (string.IsNullOrWhiteSpace(template) || string.IsNullOrWhiteSpace(addFormat)) - return; - - var indentation = GetIndentation(fileExtension); - - var members = string.Join(System.Environment.NewLine, variables.Select(v => string.Format(indentation + addFormat, v.Key, v.Value))); - - var fileContents = string.Format(template, members); - - if (fileContents != originalFileContents) - { - this.fileSystem.WriteAllText(filePath, fileContents); - } - } - - public void Dispose() - { - } - - // Because The VB-generated class is included in a namespace declaration, - // the properties must be offset by 2 tabs. - // Whereas in the C# and F# cases, 1 tab is enough. - private static string GetIndentation(string fileExtension) - { - var tabs = fileExtension.ToLowerInvariant().EndsWith("vb") ? 2 : 1; - return new string(' ', tabs * 4); - } -} diff --git a/src/GitVersion.Core/VersionConverters/OutputGenerator/OutputContext.cs b/src/GitVersion.Core/VersionConverters/OutputGenerator/OutputContext.cs deleted file mode 100644 index a3447ca4f7..0000000000 --- a/src/GitVersion.Core/VersionConverters/OutputGenerator/OutputContext.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace GitVersion.VersionConverters.OutputGenerator; - -public readonly struct OutputContext : IConverterContext -{ - public OutputContext(string workingDirectory, string? outputFile, bool? updateBuildNumber) - { - WorkingDirectory = workingDirectory; - OutputFile = outputFile; - UpdateBuildNumber = updateBuildNumber; - } - - public string WorkingDirectory { get; } - public string? OutputFile { get; } - public bool? UpdateBuildNumber { get; } -} diff --git a/src/GitVersion.Core/VersionConverters/OutputGenerator/OutputGenerator.cs b/src/GitVersion.Core/VersionConverters/OutputGenerator/OutputGenerator.cs deleted file mode 100644 index 52c4f61feb..0000000000 --- a/src/GitVersion.Core/VersionConverters/OutputGenerator/OutputGenerator.cs +++ /dev/null @@ -1,65 +0,0 @@ -using GitVersion.BuildAgents; -using GitVersion.Extensions; -using GitVersion.Helpers; -using GitVersion.Logging; -using GitVersion.Model; -using GitVersion.OutputVariables; -using Microsoft.Extensions.Options; - -namespace GitVersion.VersionConverters.OutputGenerator; - -public interface IOutputGenerator : IVersionConverter -{ -} - -public sealed class OutputGenerator : IOutputGenerator -{ - private readonly IConsole console; - private readonly IFileSystem fileSystem; - private readonly IOptions options; - private readonly ICurrentBuildAgent buildAgent; - - public OutputGenerator(ICurrentBuildAgent buildAgent, IConsole console, IFileSystem fileSystem, IOptions options) - { - this.console = console.NotNull(); - this.fileSystem = fileSystem.NotNull(); - this.options = options.NotNull(); - this.buildAgent = buildAgent.NotNull(); - } - - public void Execute(VersionVariables variables, OutputContext context) - { - var gitVersionOptions = this.options.Value; - if (gitVersionOptions.Output.Contains(OutputType.BuildServer)) - { - this.buildAgent.WriteIntegration(this.console.WriteLine, variables, context.UpdateBuildNumber ?? true); - } - if (gitVersionOptions.Output.Contains(OutputType.File)) - { - var retryOperation = new RetryAction(); - retryOperation.Execute(() => this.fileSystem.WriteAllText(context.OutputFile, variables.ToString())); - } - - if (!gitVersionOptions.Output.Contains(OutputType.Json)) return; - - switch (gitVersionOptions.ShowVariable) - { - case null: - this.console.WriteLine(variables.ToString()); - break; - - default: - if (!variables.TryGetValue(gitVersionOptions.ShowVariable, out var part)) - { - throw new WarningException($"'{gitVersionOptions.ShowVariable}' variable does not exist"); - } - - this.console.WriteLine(part); - break; - } - } - - public void Dispose() - { - } -} diff --git a/src/GitVersion.Core/VersionConverters/WixUpdater/WixVersionContext.cs b/src/GitVersion.Core/VersionConverters/WixUpdater/WixVersionContext.cs deleted file mode 100644 index c90e5ced8a..0000000000 --- a/src/GitVersion.Core/VersionConverters/WixUpdater/WixVersionContext.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace GitVersion.VersionConverters.WixUpdater; - -public readonly struct WixVersionContext : IConverterContext -{ - public WixVersionContext(string workingDirectory) => - WorkingDirectory = workingDirectory; - - public string WorkingDirectory { get; } -} diff --git a/src/GitVersion.LibGit2Sharp/Git/Branch.cs b/src/GitVersion.LibGit2Sharp/Git/Branch.cs index 5cf3265577..2cbda65c0e 100644 --- a/src/GitVersion.LibGit2Sharp/Git/Branch.cs +++ b/src/GitVersion.LibGit2Sharp/Git/Branch.cs @@ -1,7 +1,7 @@ using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class Branch : IBranch { @@ -13,24 +13,24 @@ internal sealed class Branch : IBranch internal Branch(LibGit2Sharp.Branch branch) { this.innerBranch = branch.NotNull(); - Name = new ReferenceName(branch.CanonicalName); + Name = new(branch.CanonicalName); var commit = this.innerBranch.Tip; Tip = commit is null ? null : new Commit(commit); var commits = this.innerBranch.Commits; - Commits = commits is null ? null : new CommitCollection(commits); + Commits = new CommitCollection(commits); } public ReferenceName Name { get; } public ICommit? Tip { get; } - public ICommitCollection? Commits { get; } - public int CompareTo(IBranch other) => comparerHelper.Compare(this, other); + public ICommitCollection Commits { get; } + public int CompareTo(IBranch? other) => comparerHelper.Compare(this, other); public bool Equals(IBranch? other) => equalityHelper.Equals(this, other); public bool IsDetachedHead => Name.Canonical.Equals("(no branch)", StringComparison.OrdinalIgnoreCase); public bool IsRemote => this.innerBranch.IsRemote; public bool IsTracking => this.innerBranch.IsTracking; - public override bool Equals(object obj) => Equals((obj as IBranch)); + public override bool Equals(object? obj) => Equals(obj as IBranch); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Name.ToString(); public static implicit operator LibGit2Sharp.Branch(Branch d) => d.innerBranch; diff --git a/src/GitVersion.LibGit2Sharp/Git/BranchCollection.cs b/src/GitVersion.LibGit2Sharp/Git/BranchCollection.cs index 89cb27fe04..b543161bd8 100644 --- a/src/GitVersion.LibGit2Sharp/Git/BranchCollection.cs +++ b/src/GitVersion.LibGit2Sharp/Git/BranchCollection.cs @@ -1,7 +1,7 @@ using GitVersion.Extensions; using LibGit2Sharp; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class BranchCollection : IBranchCollection { diff --git a/src/GitVersion.LibGit2Sharp/Git/Commit.cs b/src/GitVersion.LibGit2Sharp/Git/Commit.cs index 51505ed7b2..f9dd9cfc06 100644 --- a/src/GitVersion.LibGit2Sharp/Git/Commit.cs +++ b/src/GitVersion.LibGit2Sharp/Git/Commit.cs @@ -1,29 +1,30 @@ using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class Commit : GitObject, ICommit { private static readonly LambdaEqualityHelper equalityHelper = new(x => x.Id); private static readonly LambdaKeyComparer comparerHelper = new(x => x.Sha); + private readonly Lazy> parentsLazy; private readonly LibGit2Sharp.Commit innerCommit; internal Commit(LibGit2Sharp.Commit innerCommit) : base(innerCommit) { this.innerCommit = innerCommit.NotNull(); - Parents = innerCommit.Parents.Select(parent => new Commit(parent)); + this.parentsLazy = new(() => innerCommit.Parents.Select(parent => new Commit(parent)).ToList()); When = innerCommit.Committer.When; } - public int CompareTo(ICommit other) => comparerHelper.Compare(this, other); + public int CompareTo(ICommit? other) => comparerHelper.Compare(this, other); public bool Equals(ICommit? other) => equalityHelper.Equals(this, other); - public IEnumerable Parents { get; } + public IReadOnlyList Parents => this.parentsLazy.Value; public DateTimeOffset When { get; } public string Message => this.innerCommit.Message; - public override bool Equals(object obj) => Equals((obj as ICommit)); + public override bool Equals(object? obj) => Equals(obj as ICommit); public override int GetHashCode() => equalityHelper.GetHashCode(this); - public override string ToString() => $"{Id.ToString(7)} {this.innerCommit.MessageShort}"; + public override string ToString() => $"'{Id.ToString(7)}' - {this.innerCommit.MessageShort}"; public static implicit operator LibGit2Sharp.Commit(Commit d) => d.innerCommit; } diff --git a/src/GitVersion.LibGit2Sharp/Git/CommitCollection.cs b/src/GitVersion.LibGit2Sharp/Git/CommitCollection.cs index 94e1d49d03..08ebb91393 100644 --- a/src/GitVersion.LibGit2Sharp/Git/CommitCollection.cs +++ b/src/GitVersion.LibGit2Sharp/Git/CommitCollection.cs @@ -1,7 +1,7 @@ using GitVersion.Extensions; using LibGit2Sharp; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class CommitCollection : ICommitCollection { diff --git a/src/GitVersion.LibGit2Sharp/Git/GitObject.cs b/src/GitVersion.LibGit2Sharp/Git/GitObject.cs index 535056bdcf..850168393c 100644 --- a/src/GitVersion.LibGit2Sharp/Git/GitObject.cs +++ b/src/GitVersion.LibGit2Sharp/Git/GitObject.cs @@ -1,7 +1,7 @@ using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; internal class GitObject : IGitObject { @@ -15,9 +15,9 @@ internal GitObject(LibGit2Sharp.GitObject innerGitObject) Sha = innerGitObject.Sha; } - public int CompareTo(IGitObject other) => comparerHelper.Compare(this, other); + public int CompareTo(IGitObject? other) => comparerHelper.Compare(this, other); public bool Equals(IGitObject? other) => equalityHelper.Equals(this, other); - public override bool Equals(object obj) => Equals((obj as IGitObject)); + public override bool Equals(object? obj) => Equals(obj as IGitObject); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Id.ToString(7); diff --git a/src/GitVersion.LibGit2Sharp/Git/GitRepository.cs b/src/GitVersion.LibGit2Sharp/Git/GitRepository.cs index cf1f315716..683a6571ee 100644 --- a/src/GitVersion.LibGit2Sharp/Git/GitRepository.cs +++ b/src/GitVersion.LibGit2Sharp/Git/GitRepository.cs @@ -1,43 +1,26 @@ using GitVersion.Extensions; using GitVersion.Helpers; -using GitVersion.Logging; using LibGit2Sharp; -using LibGit2Sharp.Handlers; -namespace GitVersion; +namespace GitVersion.Git; -internal sealed class GitRepository : IMutatingGitRepository +internal sealed partial class GitRepository { - private readonly ILog log; - private readonly Lazy repositoryLazy; + private Lazy? repositoryLazy; - public GitRepository(ILog log, IGitRepositoryInfo repositoryInfo) - : this(log, () => repositoryInfo.GitRootPath) + private IRepository RepositoryInstance { + get + { + var lazy = this.repositoryLazy ?? throw new NullReferenceException("Repository not initialized. Call DiscoverRepository() first."); + return lazy.Value; + } } - internal GitRepository(string gitRootDirectory) - : this(new NullLog(), () => gitRootDirectory) - { - } - - internal GitRepository(IRepository repository) - { - repository = repository.NotNull(); - this.log = new NullLog(); - this.repositoryLazy = new Lazy(() => repository); - } - - private GitRepository(ILog log, Func getGitRootDirectory) - { - this.log = log.NotNull(); - this.repositoryLazy = new Lazy(() => new Repository(getGitRootDirectory())); - } - - private IRepository RepositoryInstance => this.repositoryLazy.Value; public string Path => RepositoryInstance.Info.Path; public string WorkingDirectory => RepositoryInstance.Info.WorkingDirectory; public bool IsHeadDetached => RepositoryInstance.Info.IsHeadDetached; + public bool IsShallow => RepositoryInstance.Info.IsShallow; public IBranch Head => new Branch(RepositoryInstance.Head); public ITagCollection Tags => new TagCollection(RepositoryInstance.Tags); public IReferenceCollection Refs => new ReferenceCollection(RepositoryInstance.Refs); @@ -45,6 +28,15 @@ private GitRepository(ILog log, Func getGitRootDirectory) public ICommitCollection Commits => new CommitCollection(RepositoryInstance.Commits); public IRemoteCollection Remotes => new RemoteCollection(RepositoryInstance.Network.Remotes); + public void DiscoverRepository(string? gitDirectory) + { + if (gitDirectory?.EndsWith(".git") == false) + { + gitDirectory = Repository.Discover(gitDirectory); + } + this.repositoryLazy = new(() => new Repository(gitDirectory)); + } + public ICommit? FindMergeBase(ICommit commit, ICommit otherCommit) { commit = commit.NotNull(); @@ -66,124 +58,16 @@ public int GetNumberOfUncommittedChanges() return retryAction.Execute(GetNumberOfUncommittedChangesInternal); } - public void CreateBranchForPullRequestBranch(AuthenticationInfo auth) => RepositoryExtensions.RunSafe(() => - { - this.log.Info("Fetching remote refs to see if there is a pull request ref"); - - // FIX ME: What to do when Tip is null? - if (Head.Tip == null) - return; - - var headTipSha = Head.Tip.Sha; - var remote = RepositoryInstance.Network.Remotes.Single(); - var reference = GetPullRequestReference(auth, remote, headTipSha); - var canonicalName = reference.CanonicalName; - var referenceName = ReferenceName.Parse(reference.CanonicalName); - this.log.Info($"Found remote tip '{canonicalName}' pointing at the commit '{headTipSha}'."); - - if (referenceName.IsTag) - { - this.log.Info($"Checking out tag '{canonicalName}'"); - Checkout(reference.Target.Sha); - } - else if (referenceName.IsPullRequest) - { - var fakeBranchName = canonicalName.Replace("refs/pull/", "refs/heads/pull/").Replace("refs/pull-requests/", "refs/heads/pull-requests/"); - - this.log.Info($"Creating fake local branch '{fakeBranchName}'."); - Refs.Add(fakeBranchName, headTipSha); - - this.log.Info($"Checking local branch '{fakeBranchName}' out."); - Checkout(fakeBranchName); - } - else - { - var message = $"Remote tip '{canonicalName}' from remote '{remote.Url}' doesn't look like a valid pull request."; - throw new WarningException(message); - } - }); - - public void Clone(string? sourceUrl, string? workdirPath, AuthenticationInfo auth) - { - try - { - var path = Repository.Clone(sourceUrl, workdirPath, GetCloneOptions(auth)); - this.log.Info($"Returned path after repository clone: {path}"); - } - catch (LibGit2Sharp.LockedFileException ex) - { - throw new LockedFileException(ex); - } - catch (LibGit2SharpException ex) - { - var message = ex.Message; - if (message.Contains("401")) - { - throw new Exception("Unauthorized: Incorrect username/password", ex); - } - - if (message.Contains("403")) - { - throw new Exception("Forbidden: Possibly Incorrect username/password", ex); - } - - if (message.Contains("404")) - { - throw new Exception("Not found: The repository was not found", ex); - } - - throw new Exception("There was an unknown problem with the Git repository you provided", ex); - } - } - - public void Checkout(string commitOrBranchSpec) => - RepositoryExtensions.RunSafe(() => - Commands.Checkout(RepositoryInstance, commitOrBranchSpec)); - - public void Fetch(string remote, IEnumerable refSpecs, AuthenticationInfo auth, string? logMessage) => - RepositoryExtensions.RunSafe(() => - Commands.Fetch((Repository)RepositoryInstance, remote, refSpecs, GetFetchOptions(auth), logMessage)); - - private DirectReference GetPullRequestReference(AuthenticationInfo auth, LibGit2Sharp.Remote remote, string headTipSha) - { - var network = RepositoryInstance.Network; - var credentialsProvider = GetCredentialsProvider(auth); - var remoteTips = (credentialsProvider != null - ? network.ListReferences(remote, credentialsProvider) - : network.ListReferences(remote)) - .Select(r => r.ResolveToDirectReference()).ToList(); - - this.log.Info($"Remote Refs:{System.Environment.NewLine}" + string.Join(System.Environment.NewLine, remoteTips.Select(r => r.CanonicalName))); - var refs = remoteTips.Where(r => r.TargetIdentifier == headTipSha).ToList(); - - switch (refs.Count) - { - case 0: - { - var message = $"Couldn't find any remote tips from remote '{remote.Url}' pointing at the commit '{headTipSha}'."; - throw new WarningException(message); - } - case > 1: - { - var names = string.Join(", ", refs.Select(r => r.CanonicalName)); - var message = $"Found more than one remote tip from remote '{remote.Url}' pointing at the commit '{headTipSha}'. Unable to determine which one to use ({names})."; - throw new WarningException(message); - } - } - - return refs.First(); - } - public void Dispose() { - if (this.repositoryLazy.IsValueCreated) RepositoryInstance.Dispose(); + if (this.repositoryLazy is { IsValueCreated: true }) RepositoryInstance.Dispose(); } private int GetNumberOfUncommittedChangesInternal() { // check if we have a branch tip at all to behave properly with empty repos // => return that we have actually un-committed changes because we are apparently - // running GitVersion on something which lives inside this brand new repo _/\Ö/\_ + // running GitVersion on something which lives inside this brand-new repo _/\Ö/\_ if (RepositoryInstance.Head?.Tip == null || RepositoryInstance.Diff == null) { // this is a somewhat cumbersome way of figuring out the number of changes in the repo @@ -208,22 +92,4 @@ private int GetNumberOfUncommittedChangesInternal() return changes.Count; } - - internal static string? Discover(string? path) => Repository.Discover(path); - - private static FetchOptions GetFetchOptions(AuthenticationInfo auth) => - new() { CredentialsProvider = GetCredentialsProvider(auth) }; - - private static CloneOptions GetCloneOptions(AuthenticationInfo auth) => - new() { Checkout = false, CredentialsProvider = GetCredentialsProvider(auth) }; - - private static CredentialsHandler? GetCredentialsProvider(AuthenticationInfo auth) - { - if (!auth.Username.IsNullOrWhiteSpace()) - { - return (_, _, _) => new UsernamePasswordCredentials { Username = auth.Username, Password = auth.Password ?? string.Empty }; - } - - return null; - } } diff --git a/src/GitVersion.LibGit2Sharp/Git/GitRepository.extended.cs b/src/GitVersion.LibGit2Sharp/Git/GitRepository.extended.cs new file mode 100644 index 0000000000..35abc4d410 --- /dev/null +++ b/src/GitVersion.LibGit2Sharp/Git/GitRepository.extended.cs @@ -0,0 +1,127 @@ +using GitVersion.Extensions; +using GitVersion.Helpers; +using GitVersion.Logging; +using LibGit2Sharp; +using LibGit2Sharp.Handlers; + +namespace GitVersion.Git; + +internal partial class GitRepository(ILog log) : IMutatingGitRepository +{ + public void Clone(string? sourceUrl, string? workdirPath, AuthenticationInfo auth) + { + try + { + var path = Repository.Clone(sourceUrl, workdirPath, GetCloneOptions(auth)); + log.Info($"Returned path after repository clone: {path}"); + } + catch (LibGit2Sharp.LockedFileException ex) + { + throw new LockedFileException(ex); + } + catch (LibGit2SharpException ex) + { + var message = ex.Message; + if (message.Contains("401")) + { + throw new Exception("Unauthorized: Incorrect username/password", ex); + } + + if (message.Contains("403")) + { + throw new Exception("Forbidden: Possibly Incorrect username/password", ex); + } + + if (message.Contains("404")) + { + throw new Exception("Not found: The repository was not found", ex); + } + + throw new Exception("There was an unknown problem with the Git repository you provided", ex); + } + } + public void Checkout(string commitOrBranchSpec) => + RepositoryExtensions.RunSafe(() => + Commands.Checkout(RepositoryInstance, commitOrBranchSpec)); + public void Fetch(string remote, IEnumerable refSpecs, AuthenticationInfo auth, string? logMessage) => + RepositoryExtensions.RunSafe(() => + Commands.Fetch((Repository)RepositoryInstance, remote, refSpecs, GetFetchOptions(auth), logMessage)); + public void CreateBranchForPullRequestBranch(AuthenticationInfo auth) => RepositoryExtensions.RunSafe(() => + { + log.Info("Fetching remote refs to see if there is a pull request ref"); + + // FIX ME: What to do when Tip is null? + if (Head.Tip == null) + return; + + var headTipSha = Head.Tip.Sha; + var remote = RepositoryInstance.Network.Remotes.Single(); + var reference = GetPullRequestReference(auth, remote, headTipSha); + var canonicalName = reference.CanonicalName; + var referenceName = ReferenceName.Parse(reference.CanonicalName); + log.Info($"Found remote tip '{canonicalName}' pointing at the commit '{headTipSha}'."); + + if (referenceName.IsTag) + { + log.Info($"Checking out tag '{canonicalName}'"); + Checkout(reference.Target.Sha); + } + else if (referenceName.IsPullRequest) + { + var fakeBranchName = canonicalName.Replace("refs/pull/", "refs/heads/pull/").Replace("refs/pull-requests/", "refs/heads/pull-requests/"); + + log.Info($"Creating fake local branch '{fakeBranchName}'."); + Refs.Add(fakeBranchName, headTipSha); + + log.Info($"Checking local branch '{fakeBranchName}' out."); + Checkout(fakeBranchName); + } + else + { + var message = $"Remote tip '{canonicalName}' from remote '{remote.Url}' doesn't look like a valid pull request."; + throw new WarningException(message); + } + }); + private DirectReference GetPullRequestReference(AuthenticationInfo auth, LibGit2Sharp.Remote remote, string headTipSha) + { + var network = RepositoryInstance.Network; + var credentialsProvider = GetCredentialsProvider(auth); + var remoteTips = (credentialsProvider != null + ? network.ListReferences(remote, credentialsProvider) + : network.ListReferences(remote)) + .Select(r => r.ResolveToDirectReference()).ToList(); + + log.Info($"Remote Refs:{PathHelper.NewLine}" + string.Join(PathHelper.NewLine, remoteTips.Select(r => r.CanonicalName))); + var refs = remoteTips.Where(r => r.TargetIdentifier == headTipSha).ToList(); + + switch (refs.Count) + { + case 0: + { + var message = $"Couldn't find any remote tips from remote '{remote.Url}' pointing at the commit '{headTipSha}'."; + throw new WarningException(message); + } + case > 1: + { + var names = string.Join(", ", refs.Select(r => r.CanonicalName)); + var message = $"Found more than one remote tip from remote '{remote.Url}' pointing at the commit '{headTipSha}'. Unable to determine which one to use ({names})."; + throw new WarningException(message); + } + } + + return refs[0]; + } + private static FetchOptions GetFetchOptions(AuthenticationInfo auth) => + new() { CredentialsProvider = GetCredentialsProvider(auth) }; + private static CloneOptions GetCloneOptions(AuthenticationInfo auth) => + new() { Checkout = false, FetchOptions = { CredentialsProvider = GetCredentialsProvider(auth) } }; + private static CredentialsHandler? GetCredentialsProvider(AuthenticationInfo auth) + { + if (!auth.Username.IsNullOrWhiteSpace()) + { + return (_, _, _) => new UsernamePasswordCredentials { Username = auth.Username, Password = auth.Password ?? string.Empty }; + } + + return null; + } +} diff --git a/src/GitVersion.LibGit2Sharp/Git/GitRepositoryInfo.cs b/src/GitVersion.LibGit2Sharp/Git/GitRepositoryInfo.cs index da70201a7a..a432d51a8e 100644 --- a/src/GitVersion.LibGit2Sharp/Git/GitRepositoryInfo.cs +++ b/src/GitVersion.LibGit2Sharp/Git/GitRepositoryInfo.cs @@ -1,8 +1,9 @@ using GitVersion.Extensions; using GitVersion.Helpers; +using LibGit2Sharp; using Microsoft.Extensions.Options; -namespace GitVersion; +namespace GitVersion.Git; internal class GitRepositoryInfo : IGitRepositoryInfo { @@ -62,17 +63,13 @@ public GitRepositoryInfo(IOptions options) { var gitDirectory = !DynamicGitRepositoryPath.IsNullOrWhiteSpace() ? DynamicGitRepositoryPath - : GitRepository.Discover(gitVersionOptions.WorkingDirectory); + : Repository.Discover(gitVersionOptions.WorkingDirectory); gitDirectory = gitDirectory?.TrimEnd('/', '\\'); if (gitDirectory.IsNullOrEmpty()) throw new DirectoryNotFoundException("Cannot find the .git directory"); - var directoryInfo = Directory.GetParent(gitDirectory); - if (directoryInfo == null) - { - throw new DirectoryNotFoundException("Cannot find the .git directory"); - } + var directoryInfo = Directory.GetParent(gitDirectory) ?? throw new DirectoryNotFoundException("Cannot find the .git directory"); return gitDirectory.Contains(PathHelper.Combine(".git", "worktrees")) ? Directory.GetParent(directoryInfo.FullName)?.FullName : gitDirectory; @@ -85,12 +82,12 @@ private string GetProjectRootDirectory() return gitVersionOptions.WorkingDirectory; } - var gitDirectory = GitRepository.Discover(gitVersionOptions.WorkingDirectory); + var gitDirectory = Repository.Discover(gitVersionOptions.WorkingDirectory); if (gitDirectory.IsNullOrEmpty()) throw new DirectoryNotFoundException("Cannot find the .git directory"); - return new GitRepository(gitDirectory).WorkingDirectory; + return new Repository(gitDirectory).Info.WorkingDirectory; } private string? GetGitRootPath() @@ -105,13 +102,12 @@ private static bool GitRepoHasMatchingRemote(string possiblePath, string targetU { try { - var gitRepository = new GitRepository(possiblePath); - return gitRepository.Remotes.Any(r => r.Url == targetUrl); + var gitRepository = new Repository(possiblePath); + return gitRepository.Network.Remotes.Any(r => r.Url == targetUrl); } catch (Exception) { return false; } } - } diff --git a/src/GitVersion.LibGit2Sharp/Git/ObjectId.cs b/src/GitVersion.LibGit2Sharp/Git/ObjectId.cs index 74a36ca1e1..0d924f59af 100644 --- a/src/GitVersion.LibGit2Sharp/Git/ObjectId.cs +++ b/src/GitVersion.LibGit2Sharp/Git/ObjectId.cs @@ -1,7 +1,7 @@ using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class ObjectId : IObjectId { @@ -17,9 +17,9 @@ public ObjectId(string sha) : this(new LibGit2Sharp.ObjectId(sha)) { } - public int CompareTo(IObjectId other) => comparerHelper.Compare(this, other); + public int CompareTo(IObjectId? other) => comparerHelper.Compare(this, other); public bool Equals(IObjectId? other) => equalityHelper.Equals(this, other); - public override bool Equals(object obj) => Equals((obj as IObjectId)); + public override bool Equals(object? obj) => Equals(obj as IObjectId); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => ToString(7); public static implicit operator LibGit2Sharp.ObjectId(ObjectId d) => d.innerObjectId; diff --git a/src/GitVersion.LibGit2Sharp/Git/RefSpec.cs b/src/GitVersion.LibGit2Sharp/Git/RefSpec.cs index 5cd46bc0a6..b32e388e90 100644 --- a/src/GitVersion.LibGit2Sharp/Git/RefSpec.cs +++ b/src/GitVersion.LibGit2Sharp/Git/RefSpec.cs @@ -1,22 +1,22 @@ using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; -public class RefSpec : IRefSpec +internal class RefSpec : IRefSpec { private static readonly LambdaEqualityHelper equalityHelper = new(x => x.Specification); private static readonly LambdaKeyComparer comparerHelper = new(x => x.Specification); private readonly LibGit2Sharp.RefSpec innerRefSpec; internal RefSpec(LibGit2Sharp.RefSpec refSpec) => this.innerRefSpec = refSpec.NotNull(); - public int CompareTo(IRefSpec other) => comparerHelper.Compare(this, other); + public int CompareTo(IRefSpec? other) => comparerHelper.Compare(this, other); public bool Equals(IRefSpec? other) => equalityHelper.Equals(this, other); public string Specification => this.innerRefSpec.Specification; public RefSpecDirection Direction => (RefSpecDirection)this.innerRefSpec.Direction; public string Source => this.innerRefSpec.Source; public string Destination => this.innerRefSpec.Destination; - public override bool Equals(object obj) => Equals((obj as IRefSpec)); + public override bool Equals(object? obj) => Equals(obj as IRefSpec); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Specification; } diff --git a/src/GitVersion.LibGit2Sharp/Git/RefSpecCollection.cs b/src/GitVersion.LibGit2Sharp/Git/RefSpecCollection.cs index e7ca999747..a465fcbd5d 100644 --- a/src/GitVersion.LibGit2Sharp/Git/RefSpecCollection.cs +++ b/src/GitVersion.LibGit2Sharp/Git/RefSpecCollection.cs @@ -1,6 +1,6 @@ using GitVersion.Extensions; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class RefSpecCollection : IRefSpecCollection { diff --git a/src/GitVersion.LibGit2Sharp/Git/Reference.cs b/src/GitVersion.LibGit2Sharp/Git/Reference.cs index f88d75e3f2..7afe5a3919 100644 --- a/src/GitVersion.LibGit2Sharp/Git/Reference.cs +++ b/src/GitVersion.LibGit2Sharp/Git/Reference.cs @@ -2,7 +2,7 @@ using GitVersion.Helpers; using LibGit2Sharp; -namespace GitVersion +namespace GitVersion.Git { internal sealed class Reference : IReference { @@ -21,8 +21,8 @@ internal Reference(LibGit2Sharp.Reference reference) public ReferenceName Name { get; } public IObjectId? ReferenceTargetId { get; } - public int CompareTo(IReference other) => comparerHelper.Compare(this, other); - public override bool Equals(object obj) => Equals(obj as IReference); + public int CompareTo(IReference? other) => comparerHelper.Compare(this, other); + public override bool Equals(object? obj) => Equals(obj as IReference); public bool Equals(IReference? other) => equalityHelper.Equals(this, other); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Name.ToString(); diff --git a/src/GitVersion.LibGit2Sharp/Git/ReferenceCollection.cs b/src/GitVersion.LibGit2Sharp/Git/ReferenceCollection.cs index 2383c33980..1159dfe87a 100644 --- a/src/GitVersion.LibGit2Sharp/Git/ReferenceCollection.cs +++ b/src/GitVersion.LibGit2Sharp/Git/ReferenceCollection.cs @@ -1,6 +1,6 @@ using GitVersion.Extensions; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class ReferenceCollection : IReferenceCollection { diff --git a/src/GitVersion.LibGit2Sharp/Git/Remote.cs b/src/GitVersion.LibGit2Sharp/Git/Remote.cs index b92326080c..a41d7d5e80 100644 --- a/src/GitVersion.LibGit2Sharp/Git/Remote.cs +++ b/src/GitVersion.LibGit2Sharp/Git/Remote.cs @@ -1,7 +1,7 @@ using GitVersion.Extensions; using GitVersion.Helpers; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class Remote : IRemote { @@ -12,7 +12,7 @@ internal sealed class Remote : IRemote internal Remote(LibGit2Sharp.Remote remote) => this.innerRemote = remote.NotNull(); - public int CompareTo(IRemote other) => comparerHelper.Compare(this, other); + public int CompareTo(IRemote? other) => comparerHelper.Compare(this, other); public bool Equals(IRemote? other) => equalityHelper.Equals(this, other); public string Name => this.innerRemote.Name; public string Url => this.innerRemote.Url; @@ -30,7 +30,7 @@ public IEnumerable RefSpecs public IEnumerable FetchRefSpecs => RefSpecs.Where(x => x.Direction == RefSpecDirection.Fetch); public IEnumerable PushRefSpecs => RefSpecs.Where(x => x.Direction == RefSpecDirection.Push); - public override bool Equals(object obj) => Equals((obj as IRemote)); + public override bool Equals(object? obj) => Equals(obj as IRemote); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Name; } diff --git a/src/GitVersion.LibGit2Sharp/Git/RemoteCollection.cs b/src/GitVersion.LibGit2Sharp/Git/RemoteCollection.cs index aad80d1f22..5fc8433621 100644 --- a/src/GitVersion.LibGit2Sharp/Git/RemoteCollection.cs +++ b/src/GitVersion.LibGit2Sharp/Git/RemoteCollection.cs @@ -1,6 +1,6 @@ using GitVersion.Extensions; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class RemoteCollection : IRemoteCollection { diff --git a/src/GitVersion.LibGit2Sharp/Git/RepositoryExtensions.cs b/src/GitVersion.LibGit2Sharp/Git/RepositoryExtensions.cs new file mode 100644 index 0000000000..f98e993fa2 --- /dev/null +++ b/src/GitVersion.LibGit2Sharp/Git/RepositoryExtensions.cs @@ -0,0 +1,30 @@ +namespace GitVersion.Git; + +internal static class RepositoryExtensions +{ + internal static void RunSafe(Action operation) + { + try + { + operation(); + } + catch (LibGit2Sharp.LockedFileException ex) + { + // Wrap this exception so that callers that want to catch it doesn't need to take a dependency on LibGit2Sharp. + throw new LockedFileException(ex); + } + } + + internal static T RunSafe(Func operation) + { + try + { + return operation(); + } + catch (LibGit2Sharp.LockedFileException ex) + { + // Wrap this exception so that callers that want to catch it doesn't need to take a dependency on LibGit2Sharp. + throw new LockedFileException(ex); + } + } +} diff --git a/src/GitVersion.LibGit2Sharp/Git/Tag.cs b/src/GitVersion.LibGit2Sharp/Git/Tag.cs index dd0b83b270..71d41570dc 100644 --- a/src/GitVersion.LibGit2Sharp/Git/Tag.cs +++ b/src/GitVersion.LibGit2Sharp/Git/Tag.cs @@ -2,26 +2,29 @@ using GitVersion.Helpers; using LibGit2Sharp; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class Tag : ITag { private static readonly LambdaEqualityHelper equalityHelper = new(x => x.Name.Canonical); private static readonly LambdaKeyComparer comparerHelper = new(x => x.Name.Canonical); private readonly LibGit2Sharp.Tag innerTag; + private readonly Lazy commitLazy; internal Tag(LibGit2Sharp.Tag tag) { this.innerTag = tag.NotNull(); - Name = new ReferenceName(this.innerTag.CanonicalName); + this.commitLazy = new(PeeledTargetCommit); + Name = new(this.innerTag.CanonicalName); } public ReferenceName Name { get; } - public int CompareTo(ITag other) => comparerHelper.Compare(this, other); + public int CompareTo(ITag? other) => comparerHelper.Compare(this, other); public bool Equals(ITag? other) => equalityHelper.Equals(this, other); - public string? TargetSha => this.innerTag.Target.Sha; + public string TargetSha => this.innerTag.Target.Sha; + public ICommit Commit => this.commitLazy.Value.NotNull(); - public ICommit? PeeledTargetCommit() + private ICommit? PeeledTargetCommit() { var target = this.innerTag.Target; @@ -33,7 +36,7 @@ internal Tag(LibGit2Sharp.Tag tag) return target is LibGit2Sharp.Commit commit ? new Commit(commit) : null; } - public override bool Equals(object obj) => Equals((obj as ITag)); + public override bool Equals(object? obj) => Equals(obj as ITag); public override int GetHashCode() => equalityHelper.GetHashCode(this); public override string ToString() => Name.ToString(); } diff --git a/src/GitVersion.LibGit2Sharp/Git/TagCollection.cs b/src/GitVersion.LibGit2Sharp/Git/TagCollection.cs index ca81e4077f..65f5637cda 100644 --- a/src/GitVersion.LibGit2Sharp/Git/TagCollection.cs +++ b/src/GitVersion.LibGit2Sharp/Git/TagCollection.cs @@ -1,6 +1,6 @@ using GitVersion.Extensions; -namespace GitVersion; +namespace GitVersion.Git; internal sealed class TagCollection : ITagCollection { diff --git a/src/GitVersion.LibGit2Sharp/GitVersion.LibGit2Sharp.csproj b/src/GitVersion.LibGit2Sharp/GitVersion.LibGit2Sharp.csproj index be6aa028f4..b291454cae 100644 --- a/src/GitVersion.LibGit2Sharp/GitVersion.LibGit2Sharp.csproj +++ b/src/GitVersion.LibGit2Sharp/GitVersion.LibGit2Sharp.csproj @@ -1,18 +1,15 @@ - - netstandard2.0 - + + + - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - + - + + diff --git a/src/GitVersion.LibGit2Sharp/GitVersionLibGit2SharpModule.cs b/src/GitVersion.LibGit2Sharp/GitVersionLibGit2SharpModule.cs index 1886324ece..942d60e719 100644 --- a/src/GitVersion.LibGit2Sharp/GitVersionLibGit2SharpModule.cs +++ b/src/GitVersion.LibGit2Sharp/GitVersionLibGit2SharpModule.cs @@ -1,3 +1,5 @@ +using GitVersion.Git; +using GitVersion.Logging; using Microsoft.Extensions.DependencyInjection; namespace GitVersion; @@ -6,8 +8,16 @@ public class GitVersionLibGit2SharpModule : IGitVersionModule { public void RegisterTypes(IServiceCollection services) { - services.AddSingleton(); - services.AddSingleton(); + services.AddSingleton(sp => + { + var repositoryInfo = sp.GetRequiredService(); + var log = sp.GetRequiredService(); + IGitRepository gitRepository = new GitRepository(log); + gitRepository.DiscoverRepository(repositoryInfo.GitRootPath); + return gitRepository; + }); + + services.AddSingleton(sp => (IMutatingGitRepository)sp.GetRequiredService()); services.AddSingleton(); } } diff --git a/src/GitVersion.LibGit2Sharp/PublicAPI.Shipped.txt b/src/GitVersion.LibGit2Sharp/PublicAPI.Shipped.txt index c9904bace6..7dc5c58110 100644 --- a/src/GitVersion.LibGit2Sharp/PublicAPI.Shipped.txt +++ b/src/GitVersion.LibGit2Sharp/PublicAPI.Shipped.txt @@ -1,19 +1 @@ #nullable enable -GitVersion.GitVersionLibGit2SharpModule -GitVersion.GitVersionLibGit2SharpModule.GitVersionLibGit2SharpModule() -> void -GitVersion.GitVersionLibGit2SharpModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.RefSpec -GitVersion.RefSpec.CompareTo(GitVersion.IRefSpec! other) -> int -GitVersion.RefSpec.Destination.get -> string! -GitVersion.RefSpec.Direction.get -> GitVersion.RefSpecDirection -GitVersion.RefSpec.Equals(GitVersion.IRefSpec? other) -> bool -GitVersion.RefSpec.Source.get -> string! -GitVersion.RefSpec.Specification.get -> string! -GitVersion.RepositoryExtensions -override GitVersion.RefSpec.Equals(object! obj) -> bool -override GitVersion.RefSpec.GetHashCode() -> int -override GitVersion.RefSpec.ToString() -> string! -static GitVersion.RepositoryExtensions.RunSafe(System.Action! operation) -> void -static GitVersion.RepositoryExtensions.RunSafe(System.Func! operation) -> T -static GitVersion.RepositoryExtensions.ToGitRepository(this LibGit2Sharp.IRepository! repository) -> GitVersion.IGitRepository! -static GitVersion.RepositoryExtensions.ToGitRepositoryInfo(Microsoft.Extensions.Options.IOptions! options) -> GitVersion.IGitRepositoryInfo! diff --git a/src/GitVersion.LibGit2Sharp/PublicAPI.Unshipped.txt b/src/GitVersion.LibGit2Sharp/PublicAPI.Unshipped.txt index e69de29bb2..b3106ca70c 100644 --- a/src/GitVersion.LibGit2Sharp/PublicAPI.Unshipped.txt +++ b/src/GitVersion.LibGit2Sharp/PublicAPI.Unshipped.txt @@ -0,0 +1,4 @@ +#nullable enable +GitVersion.GitVersionLibGit2SharpModule +GitVersion.GitVersionLibGit2SharpModule.GitVersionLibGit2SharpModule() -> void +GitVersion.GitVersionLibGit2SharpModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void diff --git a/src/GitVersion.LibGit2Sharp/RepositoryExtensions.cs b/src/GitVersion.LibGit2Sharp/RepositoryExtensions.cs deleted file mode 100644 index c0687802f6..0000000000 --- a/src/GitVersion.LibGit2Sharp/RepositoryExtensions.cs +++ /dev/null @@ -1,36 +0,0 @@ -using LibGit2Sharp; -using Microsoft.Extensions.Options; - -namespace GitVersion; - -public static class RepositoryExtensions -{ - public static IGitRepository ToGitRepository(this IRepository repository) => new GitRepository(repository); - public static IGitRepositoryInfo ToGitRepositoryInfo(IOptions options) => new GitRepositoryInfo(options); - - public static void RunSafe(Action operation) - { - try - { - operation(); - } - catch (LibGit2Sharp.LockedFileException ex) - { - // Wrap this exception so that callers that want to catch it don't need to take a dependency on LibGit2Sharp. - throw new LockedFileException(ex); - } - } - - public static T RunSafe(Func operation) - { - try - { - return operation(); - } - catch (LibGit2Sharp.LockedFileException ex) - { - // Wrap this exception so that callers that want to catch it don't need to take a dependency on LibGit2Sharp. - throw new LockedFileException(ex); - } - } -} diff --git a/src/GitVersion.MsBuild.Tests/FileHelperTests.cs b/src/GitVersion.MsBuild.Tests/FileHelperTests.cs index 704b66d194..6056bc5202 100644 --- a/src/GitVersion.MsBuild.Tests/FileHelperTests.cs +++ b/src/GitVersion.MsBuild.Tests/FileHelperTests.cs @@ -1,5 +1,3 @@ -using NUnit.Framework; - namespace GitVersion.MsBuild.Tests; [TestFixture] @@ -26,19 +24,23 @@ public void GetFileExtensionShouldReturnCorrectExtension(string language, string public void GetFileWriteInfoShouldCreateConstantNamedFileWhenIntermediateOutputPath() { var fileInfo = "MyIntermediateOutputPath".GetFileWriteInfo("C#", "MyProject.csproj", "GeneratedVersionInformation"); - - Assert.That(fileInfo.WorkingDirectory, Is.EqualTo("MyIntermediateOutputPath")); - Assert.That(fileInfo.FileName, Is.EqualTo("GeneratedVersionInformation.g.cs")); - Assert.That(fileInfo.FileExtension, Is.EqualTo("cs")); + Assert.Multiple(() => + { + Assert.That(fileInfo.WorkingDirectory, Is.EqualTo("MyIntermediateOutputPath")); + Assert.That(fileInfo.FileName, Is.EqualTo("GeneratedVersionInformation.g.cs")); + Assert.That(fileInfo.FileExtension, Is.EqualTo("cs")); + }); } [Test] public void GetFileWriteInfoShouldCreateRandomNamedFileWhenNoIntermediateOutputPath() { var fileInfo = FileHelper.GetFileWriteInfo(null, "C#", "MyProject.csproj", "GeneratedVersionInformation"); - - Assert.That(fileInfo.WorkingDirectory, Is.EqualTo(FileHelper.TempPath)); - Assert.That(fileInfo.FileName, Does.StartWith("GeneratedVersionInformation_MyProject_").And.EndsWith(".g.cs")); - Assert.That(fileInfo.FileExtension, Is.EqualTo("cs")); + Assert.Multiple(() => + { + Assert.That(fileInfo.WorkingDirectory, Is.EqualTo(FileHelper.TempPath)); + Assert.That(fileInfo.FileName, Does.StartWith("GeneratedVersionInformation_MyProject_").And.EndsWith(".g.cs")); + Assert.That(fileInfo.FileExtension, Is.EqualTo("cs")); + }); } } diff --git a/src/GitVersion.MsBuild.Tests/GitVersion.MsBuild.Tests.csproj b/src/GitVersion.MsBuild.Tests/GitVersion.MsBuild.Tests.csproj index 26116dd703..5aeabac2af 100644 --- a/src/GitVersion.MsBuild.Tests/GitVersion.MsBuild.Tests.csproj +++ b/src/GitVersion.MsBuild.Tests/GitVersion.MsBuild.Tests.csproj @@ -1,49 +1,35 @@ - - net48;netcoreapp3.1;net5.0;net6.0 - - true - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - + + diff --git a/src/GitVersion.MsBuild.Tests/Helpers/AssemblyParallelizable.cs b/src/GitVersion.MsBuild.Tests/Helpers/AssemblyParallelizable.cs index 9ae285d9ea..fdd365b7e2 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/AssemblyParallelizable.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/AssemblyParallelizable.cs @@ -1,3 +1 @@ -using NUnit.Framework; - [assembly: Parallelizable(ParallelScope.Fixtures)] diff --git a/src/GitVersion.MsBuild.Tests/Helpers/EventArgsFormatting.cs b/src/GitVersion.MsBuild.Tests/Helpers/EventArgsFormatting.cs index 5b6377e4bb..a0781dee3f 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/EventArgsFormatting.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/EventArgsFormatting.cs @@ -25,7 +25,7 @@ internal static string FormatEventMessage(BuildErrorEventArgs e) => /// a single string. /// /// Error to format - /// true to show the project file which issued the event, otherwise false. + /// true to show the project file which issued the event, otherwise false. /// The formatted message string. internal static string FormatEventMessage(BuildErrorEventArgs e, bool showProjectFile) => // "error" should not be localized @@ -50,7 +50,7 @@ internal static string FormatEventMessage(BuildWarningEventArgs e) => /// single string. /// /// Warning to format - /// true to show the project file which issued the event, otherwise false. + /// true to show the project file which issued the event, otherwise false. /// The formatted message string. internal static string FormatEventMessage(BuildWarningEventArgs e, bool showProjectFile) => // "warning" should not be localized @@ -140,7 +140,7 @@ int threadId { var format = new StringBuilder(); - // Uncomment these lines to show show the processor, if present. + // Uncomment these lines to show the processor, if present. /* if (threadId != 0) { @@ -148,7 +148,7 @@ int threadId } */ - if ((file == null) || (file.Length == 0)) + if (string.IsNullOrEmpty(file)) { format.Append("MSBUILD : "); // Should not be localized. } @@ -214,12 +214,12 @@ int threadId for (var i = 0; i < lines.Length; i++) { - formattedMessage.Append(string.Format( + formattedMessage.AppendFormat( CultureInfo.CurrentCulture, finalFormat, threadId, file, lineNumber, columnNumber, category, code, lines[i], endLineNumber, endColumnNumber, - subcategory, projectFile)); + subcategory, projectFile); if (i < (lines.Length - 1)) { @@ -230,7 +230,6 @@ int threadId return formattedMessage.ToString(); } - /// /// Splits strings on 'newLines' with tolerance for Everett and Dogfood builds. /// @@ -245,5 +244,5 @@ private static string[] SplitStringOnNewLines(string s) /// The kinds of newline breaks we expect. /// /// Currently we're not supporting "\r". - private static readonly string[] s_newLines = { "\r\n", "\n" }; + private static readonly string[] s_newLines = ["\r\n", "\n"]; } diff --git a/src/GitVersion.MsBuild.Tests/Helpers/GitToolsTestingExtensions.cs b/src/GitVersion.MsBuild.Tests/Helpers/GitToolsTestingExtensions.cs index 1516c77043..73aff7d672 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/GitToolsTestingExtensions.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/GitToolsTestingExtensions.cs @@ -1,5 +1,4 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; using Microsoft.Extensions.DependencyInjection; diff --git a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixture.cs b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixture.cs index 6576f81e55..b05fe01433 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixture.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixture.cs @@ -1,14 +1,7 @@ using Buildalyzer; using Buildalyzer.Environment; -using GitTools.Testing; using GitVersion.Core.Tests; -using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; - -#if NET48 -using GitVersion.Extensions; -#endif - using Microsoft.Build.Framework; using Microsoft.Build.Logging; using Microsoft.Build.Utilities.ProjectCreation; @@ -27,10 +20,11 @@ public class MsBuildExeFixture private readonly AnalyzerManager manager = new(); private readonly string ProjectPath; - public MsBuildExeFixture(RepositoryFixtureBase fixture, string workingDirectory = "") + public MsBuildExeFixture(RepositoryFixtureBase fixture, string workingDirectory = "", string language = "C#") { + var projectExtension = FileHelper.GetProjectExtension(language); this.fixture = fixture; - this.ProjectPath = PathHelper.Combine(workingDirectory, "app.csproj"); + this.ProjectPath = PathHelper.Combine(workingDirectory, $"app.{projectExtension}"); var versionFile = PathHelper.Combine(workingDirectory, "gitversion.json"); @@ -52,7 +46,7 @@ public MsBuildExeFixtureResult Execute() { foreach (var (key, value) in this.environmentVariables) { - analyzer.SetEnvironmentVariable(key, value); + analyzer.SetEnvironmentVariable(key, value!); } } @@ -68,10 +62,7 @@ public MsBuildExeFixtureResult Execute() public void CreateTestProject(Action extendProject) { - var project = RuntimeHelper.IsCoreClr() - ? ProjectCreator.Templates.SdkCsproj(this.ProjectPath) - : ProjectCreator.Templates.LegacyCsproj(this.ProjectPath, targetFrameworkVersion: "v4.8", toolsVersion: "15.0"); - + var project = ProjectCreator.Templates.SdkCsproj(this.ProjectPath); extendProject(project); project.Save(); diff --git a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixtureResult.cs b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixtureResult.cs index 7dcb21f890..e12c22b22e 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixtureResult.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildExeFixtureResult.cs @@ -1,15 +1,11 @@ using Buildalyzer; -using GitTools.Testing; namespace GitVersion.MsBuild.Tests.Helpers; -public sealed class MsBuildExeFixtureResult : IDisposable +public sealed class MsBuildExeFixtureResult(IDisposable fixture) : IDisposable { - private readonly RepositoryFixtureBase fixture; - - public MsBuildExeFixtureResult(RepositoryFixtureBase fixture) => this.fixture = fixture; public IAnalyzerResults MsBuild { get; set; } public string Output { get; set; } public string ProjectPath { get; set; } - public void Dispose() => this.fixture.Dispose(); + public void Dispose() => fixture.Dispose(); } diff --git a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixture.cs b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixture.cs index ab66d452c4..2c9ac2b028 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixture.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixture.cs @@ -1,23 +1,14 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Core.Tests; using GitVersion.Helpers; - -#if NET48 -using GitVersion.Extensions; -#endif - using GitVersion.MsBuild.Tests.Mocks; namespace GitVersion.MsBuild.Tests.Helpers; -public class MsBuildTaskFixture +public class MsBuildTaskFixture(RepositoryFixtureBase fixture) { - private readonly RepositoryFixtureBase fixture; private KeyValuePair[]? environmentVariables; - public MsBuildTaskFixture(RepositoryFixtureBase fixture) => this.fixture = fixture; - public void WithEnv(params KeyValuePair[] envs) => this.environmentVariables = envs; public MsBuildTaskFixtureResult Execute(T task) where T : GitVersionTaskBase => @@ -28,13 +19,13 @@ public MsBuildTaskFixtureResult Execute(T task) where T : GitVersionTaskBa task.BuildEngine = buildEngine; var versionFile = PathHelper.Combine(task.SolutionDirectory, "gitversion.json"); - this.fixture.WriteVersionVariables(versionFile); + fixture.WriteVersionVariables(versionFile); task.VersionFile = versionFile; var result = task.Execute(); - return new MsBuildTaskFixtureResult(this.fixture) + return new MsBuildTaskFixtureResult(fixture) { Success = result, Task = task, @@ -73,7 +64,7 @@ private static void ResetEnvironment() { SpaceAutomation.EnvironmentVariableName, null } }; - SetEnvironmentVariables(environmentalVariables.ToArray()); + SetEnvironmentVariables([.. environmentalVariables]); } private static void SetEnvironmentVariables(KeyValuePair[]? envs) @@ -81,7 +72,7 @@ private static void SetEnvironmentVariables(KeyValuePair[]? env if (envs == null) return; foreach (var (key, value) in envs) { - System.Environment.SetEnvironmentVariable(key, value); + SysEnv.SetEnvironmentVariable(key, value); } } } diff --git a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixtureResult.cs b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixtureResult.cs index 5af70dfe20..358eaa7a3e 100644 --- a/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixtureResult.cs +++ b/src/GitVersion.MsBuild.Tests/Helpers/MsBuildTaskFixtureResult.cs @@ -1,13 +1,10 @@ -using GitTools.Testing; using Microsoft.Build.Framework; namespace GitVersion.MsBuild.Tests.Helpers; -public sealed class MsBuildTaskFixtureResult : IDisposable where T : ITask +public sealed class MsBuildTaskFixtureResult(IDisposable fixture) : IDisposable + where T : ITask { - private readonly RepositoryFixtureBase fixture; - - public MsBuildTaskFixtureResult(RepositoryFixtureBase fixture) => this.fixture = fixture; public bool Success { get; set; } public T Task { get; set; } @@ -17,5 +14,5 @@ public sealed class MsBuildTaskFixtureResult : IDisposable where T : ITask public int Messages { get; set; } public string Log { get; set; } - public void Dispose() => this.fixture.Dispose(); + public void Dispose() => fixture.Dispose(); } diff --git a/src/GitVersion.MsBuild.Tests/InvalidFileCheckerTests.cs b/src/GitVersion.MsBuild.Tests/InvalidFileCheckerTests.cs index c11ee3fa1c..12b6315a1e 100644 --- a/src/GitVersion.MsBuild.Tests/InvalidFileCheckerTests.cs +++ b/src/GitVersion.MsBuild.Tests/InvalidFileCheckerTests.cs @@ -2,8 +2,6 @@ using GitVersion.Helpers; using GitVersion.MsBuild.Tests.Mocks; using Microsoft.Build.Framework; -using NUnit.Framework; -using Shouldly; namespace GitVersion.MsBuild.Tests; @@ -16,7 +14,7 @@ public class InvalidFileCheckerTests : TestBase [SetUp] public void CreateTemporaryProject() { - this.projectDirectory = PathHelper.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + this.projectDirectory = PathHelper.Combine(PathHelper.GetTempPath(), Guid.NewGuid().ToString()); this.projectFile = PathHelper.Combine(this.projectDirectory, "Fake.csproj"); Directory.CreateDirectory(this.projectDirectory); diff --git a/src/GitVersion.MsBuild.Tests/Mocks/MockEngine.cs b/src/GitVersion.MsBuild.Tests/Mocks/MockEngine.cs index bd60d73fec..6e6a5671ed 100644 --- a/src/GitVersion.MsBuild.Tests/Mocks/MockEngine.cs +++ b/src/GitVersion.MsBuild.Tests/Mocks/MockEngine.cs @@ -1,7 +1,6 @@ using System.Collections.Concurrent; using GitVersion.MsBuild.Tests.Helpers; using Microsoft.Build.Framework; -using Shouldly; namespace GitVersion.MsBuild.Tests.Mocks; @@ -71,7 +70,7 @@ public string Log /// /// Assert that the log file contains the given string. - /// Case insensitive. + /// Case-insensitive. /// /// internal void AssertLogContains(string contains) => Log.ShouldContain(contains); @@ -91,7 +90,6 @@ public bool BuildProjectFilesInParallel( bool useResultsCache, bool unloadProjectsOnCompletion) => false; - public BuildEngineResult BuildProjectFilesInParallel( string[] projectFileNames, string[] targetNames, diff --git a/src/GitVersion.MsBuild.Tests/Tasks/GenerateGitVersionInformationTest.cs b/src/GitVersion.MsBuild.Tests/Tasks/GenerateGitVersionInformationTest.cs index 7d6f7b81b8..cd9a1c7588 100644 --- a/src/GitVersion.MsBuild.Tests/Tasks/GenerateGitVersionInformationTest.cs +++ b/src/GitVersion.MsBuild.Tests/Tasks/GenerateGitVersionInformationTest.cs @@ -1,64 +1,75 @@ +using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.MsBuild.Tasks; using GitVersion.MsBuild.Tests.Helpers; using GitVersion.OutputVariables; using Microsoft.Build.Framework; using Microsoft.Build.Utilities.ProjectCreation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.MsBuild.Tests.Tasks; [TestFixture] public class GenerateGitVersionInformationTest : TestTaskBase { - [Test] - public void GenerateGitVersionInformationTaskShouldCreateFile() + private const string regexPattern = @".*{0}.*=.*""{1}"".*"; + private static readonly object[] Languages = + [ + new object[] { "C#" }, + new object[] { "F#" }, + new object[] { "VB" } + ]; + + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFile(string language) { - var task = new GenerateGitVersionInformation(); + var extension = FileHelper.GetFileExtension(language); + var task = new GenerateGitVersionInformation { Language = language }; using var result = ExecuteMsBuildTask(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.GitVersionInformationFilePath.ShouldNotBeNull(); + result.Task.GitVersionInformationFilePath.ShouldMatch($@"GitVersionInformation.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.GitVersionInformationFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""2"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.2.4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.2.4+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); } - [Test] - public void GenerateGitVersionInformationTaskShouldCreateFileInBuildServer() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileInBuildServer(string language) { - var task = new GenerateGitVersionInformation(); + var extension = FileHelper.GetFileExtension(language); + var task = new GenerateGitVersionInformation { Language = language }; using var result = ExecuteMsBuildTaskInAzurePipeline(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.GitVersionInformationFilePath.ShouldNotBeNull(); + result.Task.GitVersionInformationFilePath.ShouldMatch($@"GitVersionInformation.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.GitVersionInformationFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""0"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.0.1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.0.1+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "0")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.0.1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.0.1-1")); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuild() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuild(string language) { const string taskName = nameof(GenerateGitVersionInformation); const string outputProperty = nameof(GenerateGitVersionInformation.GitVersionInformationFilePath); + var extension = FileHelper.GetFileExtension(language); - using var result = ExecuteMsBuildExe(project => AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty)); + using var result = ExecuteMsBuildExe(project => + AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, language), language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -66,26 +77,26 @@ public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuild( result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), "GitVersionInformation.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), $"GitVersionInformation.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""2"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.2.4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.2.4+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildInBuildServer() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildInBuildServer(string language) { const string taskName = nameof(GenerateGitVersionInformation); const string outputProperty = nameof(GenerateGitVersionInformation.GitVersionInformationFilePath); + var extension = FileHelper.GetFileExtension(language); - using var result = ExecuteMsBuildExeInAzurePipeline(project => AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty)); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, language), language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -93,65 +104,74 @@ public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildI result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), "GitVersionInformation.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), $"GitVersionInformation.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""0"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.0.1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.0.1+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "0")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.0.1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.0.1-1")); } - [Test] - public void GenerateGitVersionInformationTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExist() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExist(string language) { - var task = new GenerateGitVersionInformation { IntermediateOutputPath = Guid.NewGuid().ToString("N") }; + var extension = FileHelper.GetFileExtension(language); + var task = new GenerateGitVersionInformation { Language = language, IntermediateOutputPath = Guid.NewGuid().ToString("N") }; using var result = ExecuteMsBuildTask(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.GitVersionInformationFilePath.ShouldNotBeNull(); + result.Task.GitVersionInformationFilePath.ShouldMatch($@"GitVersionInformation.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.GitVersionInformationFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""2"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.2.4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.2.4+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); + DirectoryHelper.DeleteDirectory(task.IntermediateOutputPath); } - [Test] - public void GenerateGitVersionInformationTaskShouldCreateFileInBuildServerWhenIntermediateOutputPathDoesNotExist() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileInBuildServerWhenIntermediateOutputPathDoesNotExist(string language) { - var task = new GenerateGitVersionInformation { IntermediateOutputPath = Guid.NewGuid().ToString("N") }; + var extension = FileHelper.GetFileExtension(language); + var task = new GenerateGitVersionInformation { Language = language, IntermediateOutputPath = Guid.NewGuid().ToString("N") }; using var result = ExecuteMsBuildTaskInAzurePipeline(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.GitVersionInformationFilePath.ShouldNotBeNull(); + result.Task.GitVersionInformationFilePath.ShouldMatch($@"GitVersionInformation.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.GitVersionInformationFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""0"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.0.1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.0.1+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "0")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.0.1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.0.1-1")); + DirectoryHelper.DeleteDirectory(task.IntermediateOutputPath); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExist() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExist(string language) { const string taskName = nameof(GenerateGitVersionInformation); const string outputProperty = nameof(GenerateGitVersionInformation.GitVersionInformationFilePath); var randDir = Guid.NewGuid().ToString("N"); - using var result = ExecuteMsBuildExe(project => AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, Path.Combine("$(MSBuildProjectDirectory)", randDir))); + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExe(project => + { + var intermediateOutputPath = PathHelper.Combine("$(MSBuildProjectDirectory)", randDir); + AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath); + }, language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -159,27 +179,30 @@ public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildA result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, "GitVersionInformation.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"GitVersionInformation.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""2"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.2.4"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.2.4+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExistInBuildServer() + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExistInBuildServer(string language) { const string taskName = nameof(GenerateGitVersionInformation); const string outputProperty = nameof(GenerateGitVersionInformation.GitVersionInformationFilePath); var randDir = Guid.NewGuid().ToString("N"); - using var result = ExecuteMsBuildExeInAzurePipeline(project => AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, Path.Combine("$(MSBuildProjectDirectory)", randDir))); + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + { + var intermediateOutputPath = PathHelper.Combine("$(MSBuildProjectDirectory)", randDir); + AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath); + }, language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -187,30 +210,155 @@ public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildA result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, "GitVersionInformation.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"GitVersionInformation.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain($@"{nameof(VersionVariables.Major)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Minor)} = ""0"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.Patch)} = ""1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.MajorMinorPatch)} = ""1.0.1"""); - fileContent.ShouldContain($@"{nameof(VersionVariables.FullSemVer)} = ""1.0.1+1"""); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "0")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.0.1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.0.1-1")); } - private static void AddGenerateGitVersionInformationTask(ProjectCreator project, string targetToRun, string taskName, string outputProperty, string intermediateOutputPath = "$(MSBuildProjectDirectory)") + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildAndUseProjectNamespaceIsSpecifiedAndRootNamespaceIsSet(string language) + { + const string taskName = nameof(GenerateGitVersionInformation); + const string outputProperty = nameof(GenerateGitVersionInformation.GitVersionInformationFilePath); + var randDir = Guid.NewGuid().ToString("N"); + + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExe(project => + { + var intermediateOutputPath = PathHelper.Combine("$(MSBuildProjectDirectory)", randDir); + AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath).Property("UseProjectNamespaceForGitVersionInformation", "True").Property("RootNamespace", "Test.Root"); + }, language); + + result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); + result.MsBuild.Count.ShouldBeGreaterThan(0); + result.MsBuild.OverallSuccess.ShouldBe(true); + result.MsBuild.ShouldAllBe(x => x.Succeeded); + result.Output.ShouldNotBeNullOrWhiteSpace(); + + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"GitVersionInformation.g.{extension}"); + result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); + + var fileContent = File.ReadAllText(generatedFilePath); + TestContext.WriteLine(fileContent); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); + fileContent.ShouldContain("namespace Test.Root"); + } + + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWhenRunWithMsBuildAndUseProjectNamespaceIsSpecifiedAndRootNamespaceIsNotSet(string language) + { + const string taskName = nameof(GenerateGitVersionInformation); + const string outputProperty = nameof(GenerateGitVersionInformation.GitVersionInformationFilePath); + var randDir = Guid.NewGuid().ToString("N"); + + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + { + var intermediateOutputPath = PathHelper.Combine("$(MSBuildProjectDirectory)", randDir); + AddGenerateGitVersionInformationTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath).Property("UseProjectNamespaceForGitVersionInformation", "True"); + }, language); + + result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); + result.MsBuild.Count.ShouldBeGreaterThan(0); + result.MsBuild.OverallSuccess.ShouldBe(true); + result.MsBuild.ShouldAllBe(x => x.Succeeded); + result.Output.ShouldNotBeNullOrWhiteSpace(); + + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"GitVersionInformation.g.{extension}"); + result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); + + var fileContent = File.ReadAllText(generatedFilePath); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "0")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.0.1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.0.1-1")); + fileContent.ShouldContain("namespace App"); + } + + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWithUseProjectNamespaceSetAndRootNamespaceUnSet(string language) + { + var extension = FileHelper.GetFileExtension(language); + var task = new GenerateGitVersionInformation + { + Language = language, + UseProjectNamespaceForGitVersionInformation = "true", + ProjectFile = "App.Project.csproj", + }; + using var result = ExecuteMsBuildTask(task); + + result.Success.ShouldBe(true); + result.Errors.ShouldBe(0); + result.Task.GitVersionInformationFilePath.ShouldNotBeNull(); + result.Task.GitVersionInformationFilePath.ShouldMatch($@"GitVersionInformation.*\.g\.{extension}"); + + var fileContent = File.ReadAllText(result.Task.GitVersionInformationFilePath); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); + fileContent.ShouldContain("namespace App.Project"); + } + + [TestCaseSource(nameof(Languages))] + public void GenerateGitVersionInformationTaskShouldCreateFileWithUseProjectNamespaceSetAndRootNamespaceIsSet(string language) + { + var extension = FileHelper.GetFileExtension(language); + var task = new GenerateGitVersionInformation + { + Language = language, + UseProjectNamespaceForGitVersionInformation = "true", + ProjectFile = "App.Project.csproj", + RootNamespace = "App.Project.RootNamespace", + }; + using var result = ExecuteMsBuildTask(task); + + result.Success.ShouldBe(true); + result.Errors.ShouldBe(0); + result.Task.GitVersionInformationFilePath.ShouldNotBeNull(); + result.Task.GitVersionInformationFilePath.ShouldMatch($@"GitVersionInformation.*\.g\.{extension}"); + + var fileContent = File.ReadAllText(result.Task.GitVersionInformationFilePath); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Major), "1")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Minor), "2")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.Patch), "4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")); + fileContent.ShouldMatch(string.Format(regexPattern, nameof(GitVersionVariables.FullSemVer), "1.2.4-1")); + + fileContent.ShouldContain("namespace App.Project.RootNamespace"); + } + + private static ProjectCreator AddGenerateGitVersionInformationTask(ProjectCreator project, string targetToRun, string taskName, + string outputProperty, string language, + string intermediateOutputPath = "$(MSBuildProjectDirectory)") { var assemblyFileLocation = typeof(GitVersionTaskBase).Assembly.Location; - project.UsingTaskAssemblyFile(taskName, assemblyFileLocation) + return project.UsingTaskAssemblyFile(taskName, assemblyFileLocation) + .Property("ManagePackageVersionsCentrally", "false") .Property("GenerateAssemblyInfo", "false") + .Property("Language", language) .Target(targetToRun, beforeTargets: "CoreCompile;GetAssemblyVersion;GenerateNuspec") .Task(taskName, parameters: new Dictionary { { "SolutionDirectory", "$(MSBuildProjectDirectory)" }, { "VersionFile", "$(MSBuildProjectDirectory)/gitversion.json" }, { "ProjectFile", "$(MSBuildProjectFullPath)" }, + { "Language", "$(Language)" }, { "IntermediateOutputPath", intermediateOutputPath }, - { "Language", "$(Language)" } + { "UseProjectNamespaceForGitVersionInformation", "$(UseProjectNamespaceForGitVersionInformation)" }, + { "RootNamespace", "$(RootNamespace)" }, }) .TaskOutputProperty(outputProperty, outputProperty) .ItemGroup() diff --git a/src/GitVersion.MsBuild.Tests/Tasks/GetVersionTaskTests.cs b/src/GitVersion.MsBuild.Tests/Tasks/GetVersionTaskTests.cs index 4a53d4c505..2ca7282b1e 100644 --- a/src/GitVersion.MsBuild.Tests/Tasks/GetVersionTaskTests.cs +++ b/src/GitVersion.MsBuild.Tests/Tasks/GetVersionTaskTests.cs @@ -3,8 +3,6 @@ using GitVersion.OutputVariables; using Microsoft.Build.Framework; using Microsoft.Build.Utilities.ProjectCreation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.MsBuild.Tests.Tasks; @@ -16,10 +14,10 @@ public void OutputsShouldMatchVariableProvider() { var taskProperties = typeof(GetVersion) .GetProperties() - .Where(p => p.GetCustomAttributes(typeof(OutputAttribute), false).Any()) + .Where(p => p.GetCustomAttributes(typeof(OutputAttribute), false).Length != 0) .Select(p => p.Name); - var variablesProperties = VersionVariables.AvailableVariables; + var variablesProperties = GitVersionVariables.AvailableVariables; taskProperties.ShouldBe(variablesProperties, true); } @@ -37,7 +35,7 @@ public void GetVersionTaskShouldReturnVersionOutputVariables() result.Task.Minor.ShouldBe("2"); result.Task.Patch.ShouldBe("4"); result.Task.MajorMinorPatch.ShouldBe("1.2.4"); - result.Task.FullSemVer.ShouldBe("1.2.4+1"); + result.Task.FullSemVer.ShouldBe("1.2.4-1"); } [Test] @@ -53,16 +51,14 @@ public void GetVersionTaskShouldReturnVersionOutputVariablesForBuildServer() result.Task.Minor.ShouldBe("0"); result.Task.Patch.ShouldBe("1"); result.Task.MajorMinorPatch.ShouldBe("1.0.1"); - result.Task.FullSemVer.ShouldBe("1.0.1+1"); + result.Task.FullSemVer.ShouldBe("1.0.1-1"); } - [TestCase(nameof(VersionVariables.Major), "1")] - [TestCase(nameof(VersionVariables.Minor), "2")] - [TestCase(nameof(VersionVariables.Patch), "4")] - [TestCase(nameof(VersionVariables.MajorMinorPatch), "1.2.4")] - [TestCase(nameof(VersionVariables.FullSemVer), "1.2.4+1")] - [Category(NoNet48)] - [Category(NoMono)] + [TestCase(nameof(GitVersionVariables.Major), "1")] + [TestCase(nameof(GitVersionVariables.Minor), "2")] + [TestCase(nameof(GitVersionVariables.Patch), "4")] + [TestCase(nameof(GitVersionVariables.MajorMinorPatch), "1.2.4")] + [TestCase(nameof(GitVersionVariables.FullSemVer), "1.2.4-1")] public void GetVersionTaskShouldReturnVersionOutputVariablesWhenRunWithMsBuild(string outputProperty, string version) { const string taskName = nameof(GetVersion); @@ -77,18 +73,17 @@ public void GetVersionTaskShouldReturnVersionOutputVariablesWhenRunWithMsBuild(s result.Output.ShouldContain($"GitVersion_{outputProperty}: {version}"); } - [TestCase(nameof(VersionVariables.Major), "1")] - [TestCase(nameof(VersionVariables.Minor), "0")] - [TestCase(nameof(VersionVariables.Patch), "1")] - [TestCase(nameof(VersionVariables.MajorMinorPatch), "1.0.1")] - [TestCase(nameof(VersionVariables.FullSemVer), "1.0.1+1")] - [Category(NoNet48)] - [Category(NoMono)] + [TestCase(nameof(GitVersionVariables.Major), "1")] + [TestCase(nameof(GitVersionVariables.Minor), "0")] + [TestCase(nameof(GitVersionVariables.Patch), "1")] + [TestCase(nameof(GitVersionVariables.MajorMinorPatch), "1.0.1")] + [TestCase(nameof(GitVersionVariables.FullSemVer), "1.0.1-1")] public void GetVersionTaskShouldReturnVersionOutputVariablesWhenRunWithMsBuildInBuildServer(string outputProperty, string version) { const string taskName = nameof(GetVersion); - using var result = ExecuteMsBuildExeInAzurePipeline(project => AddGetVersionTask(project, taskName, taskName, outputProperty)); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + AddGetVersionTask(project, taskName, taskName, outputProperty)); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); diff --git a/src/GitVersion.MsBuild.Tests/Tasks/TestTaskBase.cs b/src/GitVersion.MsBuild.Tests/Tasks/TestTaskBase.cs index 53d826f351..ed19e7ad0c 100644 --- a/src/GitVersion.MsBuild.Tests/Tasks/TestTaskBase.cs +++ b/src/GitVersion.MsBuild.Tests/Tasks/TestTaskBase.cs @@ -1,9 +1,10 @@ -using GitTools.Testing; -using GitVersion.BuildAgents; +using GitVersion.Agents; using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; +using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.MsBuild.Tests.Helpers; +using GitVersion.Output; using LibGit2Sharp; using Microsoft.Build.Utilities.ProjectCreation; @@ -21,23 +22,23 @@ protected static MsBuildTaskFixtureResult ExecuteMsBuildTask(T task) where { var fixture = CreateLocalRepositoryFixture(); task.SolutionDirectory = fixture.RepositoryPath; - + AddOverrides(task); var msbuildFixture = new MsBuildTaskFixture(fixture); var result = msbuildFixture.Execute(task); - if (result.Success == false) Console.WriteLine(result.Log); + if (!result.Success) Console.WriteLine(result.Log); return result; } - protected static MsBuildExeFixtureResult ExecuteMsBuildExe(Action extendProject) + protected static MsBuildExeFixtureResult ExecuteMsBuildExe(Action extendProject, string language = "C#") { var fixture = CreateLocalRepositoryFixture(); - var msbuildFixture = new MsBuildExeFixture(fixture, fixture.RepositoryPath); + var msbuildFixture = new MsBuildExeFixture(fixture, fixture.RepositoryPath, language); msbuildFixture.CreateTestProject(extendProject); var result = msbuildFixture.Execute(); - if (result.MsBuild.OverallSuccess == false) Console.WriteLine(result.Output); + if (!result.MsBuild.OverallSuccess) Console.WriteLine(result.Output); return result; } @@ -45,13 +46,14 @@ protected static MsBuildTaskFixtureResult ExecuteMsBuildTaskInAzurePipeline>(env.ToArray()); + var environmentVariables = env.ToList(); if (buildNumber != null) { - environmentVariables.Add(new KeyValuePair("BUILD_BUILDNUMBER", buildNumber)); + environmentVariables.Add(new("BUILD_BUILDNUMBER", buildNumber)); } - msbuildFixture.WithEnv(environmentVariables.ToArray()); + msbuildFixture.WithEnv([.. environmentVariables]); if (configurationText != null) { CreateConfiguration(task.SolutionDirectory, configurationText); @@ -59,38 +61,43 @@ protected static MsBuildTaskFixtureResult ExecuteMsBuildTaskInAzurePipeline ExecuteMsBuildTaskInGitHubActions(T task, string envFilePath) where T : GitVersionTaskBase + protected static MsBuildTaskFixtureResult ExecuteMsBuildTaskInGitHubActions(T task) where T : GitVersionTaskBase { var fixture = CreateRemoteRepositoryFixture(); task.SolutionDirectory = fixture.LocalRepositoryFixture.RepositoryPath; + AddOverrides(task); var msbuildFixture = new MsBuildTaskFixture(fixture); - msbuildFixture.WithEnv( - new KeyValuePair("GITHUB_ACTIONS", "true"), - new KeyValuePair("GITHUB_ENV", envFilePath) - ); + msbuildFixture.WithEnv([new("GITHUB_ACTIONS", "true")]); var result = msbuildFixture.Execute(task); - if (result.Success == false) + if (!result.Success) Console.WriteLine(result.Log); + return result; } - protected static MsBuildExeFixtureResult ExecuteMsBuildExeInAzurePipeline(Action extendProject) + protected static MsBuildExeFixtureResult ExecuteMsBuildExeInAzurePipeline(Action extendProject, string language = "C#") { var fixture = CreateRemoteRepositoryFixture(); - var msbuildFixture = new MsBuildExeFixture(fixture, fixture.LocalRepositoryFixture.RepositoryPath); + var msbuildFixture = new MsBuildExeFixture(fixture, fixture.LocalRepositoryFixture.RepositoryPath, language); msbuildFixture.CreateTestProject(extendProject); - msbuildFixture.WithEnv(env.ToArray()); + msbuildFixture.WithEnv([.. env]); var result = msbuildFixture.Execute(); - if (result.MsBuild.OverallSuccess == false) Console.WriteLine(result.Output); + if (!result.MsBuild.OverallSuccess) Console.WriteLine(result.Output); return result; } + private static void AddOverrides(GitVersionTaskBase task) => + task.WithOverrides(services => + { + services.AddModule(new GitVersionBuildAgentsModule()); + services.AddModule(new GitVersionOutputModule()); + }); private static EmptyRepositoryFixture CreateLocalRepositoryFixture() { @@ -109,7 +116,7 @@ private static RemoteRepositoryFixture CreateRemoteRepositoryFixture() fixture.Repository.MakeACommit(); fixture.Repository.CreateBranch("develop"); - Commands.Fetch((Repository)fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, Array.Empty(), new FetchOptions(), null); + Commands.Fetch(fixture.LocalRepositoryFixture.Repository, fixture.LocalRepositoryFixture.Repository.Network.Remotes.First().Name, [], new(), null); Commands.Checkout(fixture.LocalRepositoryFixture.Repository, fixture.Repository.Head.Tip); fixture.LocalRepositoryFixture.Repository.Branches.Remove(MainBranch); fixture.InitializeRepo(); @@ -118,7 +125,7 @@ private static RemoteRepositoryFixture CreateRemoteRepositoryFixture() private static void CreateConfiguration(string repoFolder, string content) { - var configFilePath = PathHelper.Combine(repoFolder, ConfigFileLocator.DefaultFileName); + var configFilePath = PathHelper.Combine(repoFolder, ConfigurationFileLocator.DefaultFileName); File.WriteAllText(configFilePath, content); } } diff --git a/src/GitVersion.MsBuild.Tests/Tasks/UpdateAssemblyInfoTaskTest.cs b/src/GitVersion.MsBuild.Tests/Tasks/UpdateAssemblyInfoTaskTest.cs index 4108b746f6..651f9895e5 100644 --- a/src/GitVersion.MsBuild.Tests/Tasks/UpdateAssemblyInfoTaskTest.cs +++ b/src/GitVersion.MsBuild.Tests/Tasks/UpdateAssemblyInfoTaskTest.cs @@ -1,55 +1,65 @@ +using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.MsBuild.Tasks; using GitVersion.MsBuild.Tests.Helpers; using Microsoft.Build.Framework; using Microsoft.Build.Utilities.ProjectCreation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.MsBuild.Tests.Tasks; [TestFixture] public class UpdateAssemblyInfoTaskTest : TestTaskBase { - [Test] - public void UpdateAssemblyInfoTaskShouldCreateFile() + private static readonly object[] Languages = + [ + new object[] { "C#" }, + new object[] { "F#" }, + new object[] { "VB" } + ]; + + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFile(string language) { - var task = new UpdateAssemblyInfo(); + var extension = FileHelper.GetFileExtension(language); + var task = new UpdateAssemblyInfo { Language = language }; using var result = ExecuteMsBuildTask(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull(); + result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")"); } - [Test] - public void UpdateAssemblyInfoTaskShouldCreateFileInBuildServer() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileInBuildServer(string language) { - var task = new UpdateAssemblyInfo(); + var extension = FileHelper.GetFileExtension(language); + var task = new UpdateAssemblyInfo { Language = language }; using var result = ExecuteMsBuildTaskInAzurePipeline(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull(); + result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")"); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuild() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuild(string language) { const string taskName = nameof(UpdateAssemblyInfo); const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath); - using var result = ExecuteMsBuildExe(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty)); + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExe(project => + AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language), language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -57,22 +67,22 @@ public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuild() result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), "AssemblyInfo.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), $"AssemblyInfo.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")"); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildInBuildServer() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildInBuildServer(string language) { const string taskName = nameof(UpdateAssemblyInfo); const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath); - using var result = ExecuteMsBuildExeInAzurePipeline(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty)); + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language), language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -80,53 +90,62 @@ public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildInBuildServe result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), "AssemblyInfo.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), $"AssemblyInfo.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")"); } - [Test] - public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExist() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExist(string language) { - var task = new UpdateAssemblyInfo { IntermediateOutputPath = Guid.NewGuid().ToString("N") }; + var extension = FileHelper.GetFileExtension(language); + var task = new UpdateAssemblyInfo { Language = language, IntermediateOutputPath = Guid.NewGuid().ToString("N") }; using var result = ExecuteMsBuildTask(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull(); + result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")"); + DirectoryHelper.DeleteDirectory(task.IntermediateOutputPath); } - [Test] - public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExistInBuildServer() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileWhenIntermediateOutputPathDoesNotExistInBuildServer(string language) { - var task = new UpdateAssemblyInfo { IntermediateOutputPath = Guid.NewGuid().ToString("N") }; + var extension = FileHelper.GetFileExtension(language); + var task = new UpdateAssemblyInfo { Language = language, IntermediateOutputPath = Guid.NewGuid().ToString("N") }; using var result = ExecuteMsBuildTaskInAzurePipeline(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); result.Task.AssemblyInfoTempFilePath.ShouldNotBeNull(); + result.Task.AssemblyInfoTempFilePath.ShouldMatch($@"AssemblyInfo.*\.g\.{extension}"); var fileContent = File.ReadAllText(result.Task.AssemblyInfoTempFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")"); + DirectoryHelper.DeleteDirectory(task.IntermediateOutputPath); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExist() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExist(string language) { const string taskName = nameof(UpdateAssemblyInfo); const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath); var randDir = Guid.NewGuid().ToString("N"); - using var result = ExecuteMsBuildExe(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, Path.Combine("$(MSBuildProjectDirectory)", randDir))); + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExe(project => + { + var intermediateOutputPath = PathHelper.Combine("$(MSBuildProjectDirectory)", randDir); + AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath); + }, language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -134,23 +153,26 @@ public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermedi result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, "AssemblyInfo.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"AssemblyInfo.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.2.4.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.2.4.0"")"); } - [Test] - [Category(NoNet48)] - [Category(NoMono)] - public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExistInBuildServer() + [TestCaseSource(nameof(Languages))] + public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermediateOutputPathDoesNotExistInBuildServer(string language) { const string taskName = nameof(UpdateAssemblyInfo); const string outputProperty = nameof(UpdateAssemblyInfo.AssemblyInfoTempFilePath); var randDir = Guid.NewGuid().ToString("N"); - using var result = ExecuteMsBuildExeInAzurePipeline(project => AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, Path.Combine("$(MSBuildProjectDirectory)", randDir))); + var extension = FileHelper.GetFileExtension(language); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + { + var intermediateOutputPath = PathHelper.Combine("$(MSBuildProjectDirectory)", randDir); + AddUpdateAssemblyInfoTask(project, taskName, taskName, outputProperty, language, intermediateOutputPath); + }, language); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); @@ -158,18 +180,22 @@ public void UpdateAssemblyInfoTaskShouldCreateFileWhenRunWithMsBuildAndIntermedi result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, "AssemblyInfo.g.cs"); + var generatedFilePath = PathHelper.Combine(Path.GetDirectoryName(result.ProjectPath), randDir, $"AssemblyInfo.g.{extension}"); result.Output.ShouldContain($"{outputProperty}: {generatedFilePath}"); var fileContent = File.ReadAllText(generatedFilePath); - fileContent.ShouldContain(@"[assembly: AssemblyVersion(""1.0.1.0"")]"); + fileContent.ShouldContain(@"assembly: AssemblyVersion(""1.0.1.0"")"); } - private static void AddUpdateAssemblyInfoTask(ProjectCreator project, string targetToRun, string taskName, string outputProperty, string intermediateOutputPath = "$(MSBuildProjectDirectory)") + private static void AddUpdateAssemblyInfoTask(ProjectCreator project, string targetToRun, string taskName, + string outputProperty, string language, + string intermediateOutputPath = "$(MSBuildProjectDirectory)") { var assemblyFileLocation = typeof(GitVersionTaskBase).Assembly.Location; project.UsingTaskAssemblyFile(taskName, assemblyFileLocation) + .Property("ManagePackageVersionsCentrally", "false") .Property("GenerateAssemblyInfo", "false") + .Property("Language", language) .Target(targetToRun, beforeTargets: "CoreCompile;GetAssemblyVersion;GenerateNuspec") .Task(taskName, parameters: new Dictionary { diff --git a/src/GitVersion.MsBuild.Tests/Tasks/WriteVersionInfoTest.cs b/src/GitVersion.MsBuild.Tests/Tasks/WriteVersionInfoTest.cs index 6210c5b768..a941917b96 100644 --- a/src/GitVersion.MsBuild.Tests/Tasks/WriteVersionInfoTest.cs +++ b/src/GitVersion.MsBuild.Tests/Tasks/WriteVersionInfoTest.cs @@ -1,25 +1,13 @@ +using GitVersion.Helpers; using GitVersion.MsBuild.Tasks; using GitVersion.MsBuild.Tests.Helpers; using Microsoft.Build.Utilities.ProjectCreation; -using NUnit.Framework; -using Shouldly; namespace GitVersion.MsBuild.Tests.Tasks; [TestFixture] public class WriteVersionInfoTest : TestTaskBase { - private string GitHubEnvFilePath { get; set; } = Path.GetTempFileName(); - - [OneTimeTearDown] - public void OneTimeTearDown() - { - if (File.Exists(GitHubEnvFilePath)) - { - File.Delete(GitHubEnvFilePath); - } - } - [Test] public void WriteVersionInfoTaskShouldNotLogOutputVariablesToBuildOutput() { @@ -41,10 +29,9 @@ public void WriteVersionInfoTaskShouldLogOutputVariablesToBuildOutputInAzurePipe result.Success.ShouldBe(true); result.Errors.ShouldBe(0); - result.Log.ShouldContain("##vso[task.setvariable variable=GitVersion.FullSemVer]1.0.1+1"); + result.Log.ShouldContain("##vso[task.setvariable variable=GitVersion.FullSemVer]1.0.1-1"); } - [TestCase("2021-02-14.1")] public void WriteVersionInfoTaskShouldNotUpdateBuildNumberInAzurePipeline(string buildNumber) { @@ -58,12 +45,11 @@ public void WriteVersionInfoTaskShouldNotUpdateBuildNumberInAzurePipeline(string result.Log.ShouldNotContain("##vso[build.updatebuildnumber]"); } - - [TestCase("2021-02-14.1-$(GITVERSION.FullSemVer)", "2021-02-14.1-1.0.1+1", Ignore = "#2552 - GitVersion.MsBuild does not set Azure DevOps build number")] - [TestCase("2021-02-14.1-$(GITVERSION.SemVer)", "2021-02-14.1-1.0.1", Ignore = "#2552 - GitVersion.MsBuild does not set Azure DevOps build number")] - [TestCase("2021-02-14.1-$(GITVERSION.minor)", "2021-02-14.1-0", Ignore = "#2552 - GitVersion.MsBuild does not set Azure DevOps build number")] - [TestCase("2021-02-14.1-$(GITVERSION_MAJOR)", "2021-02-14.1-1", Ignore = "#2552 - GitVersion.MsBuild does not set Azure DevOps build number")] - [TestCase("2021-02-14.1", "1.0.1+1", Ignore = "#2552 - GitVersion.MsBuild does not set Azure DevOps build number")] + [TestCase("2021-02-14.1-$(GITVERSION.FullSemVer)", "2021-02-14.1-1.0.1-1")] + [TestCase("2021-02-14.1-$(GITVERSION.SemVer)", "2021-02-14.1-1.0.1")] + [TestCase("2021-02-14.1-$(GITVERSION.minor)", "2021-02-14.1-0")] + [TestCase("2021-02-14.1-$(GITVERSION_MAJOR)", "2021-02-14.1-1")] + [TestCase("2021-02-14.1", "1.0.1-1")] public void WriteVersionInfoTaskShouldUpdateBuildNumberInAzurePipeline(string buildNumber, string expected) { var task = new WriteVersionInfoToBuildLog(); @@ -78,19 +64,34 @@ public void WriteVersionInfoTaskShouldUpdateBuildNumberInAzurePipeline(string bu [Test] public void WriteVersionInfoTaskShouldLogOutputVariablesToBuildOutputInGitHubActions() { + var envFilePath = SysEnv.GetEnvironmentVariable("GITHUB_ENV"); + if (!string.IsNullOrWhiteSpace(envFilePath)) + { + Assert.Pass("This test should be ignored when running on GitHub Actions."); + return; + } + + envFilePath = $"{PathHelper.GetTempPath()}/github-env.txt"; + SysEnv.SetEnvironmentVariable("GITHUB_ENV", envFilePath); + + if (File.Exists(envFilePath)) + { + File.Delete(envFilePath); + } + var task = new WriteVersionInfoToBuildLog(); - using var result = ExecuteMsBuildTaskInGitHubActions(task, GitHubEnvFilePath); + using var result = ExecuteMsBuildTaskInGitHubActions(task); result.Success.ShouldBe(true); result.Errors.ShouldBe(0); - string content = File.ReadAllText(GitHubEnvFilePath); + string content = File.ReadAllText(envFilePath); content.ShouldContain("GitVersion_SemVer=1.0.1"); + + File.Delete(envFilePath); } [Test] - [Category(NoNet48)] - [Category(NoMono)] public void WriteVersionInfoTaskShouldNotLogOutputVariablesToBuildOutputWhenRunWithMsBuild() { const string taskName = nameof(WriteVersionInfoToBuildLog); @@ -106,20 +107,19 @@ public void WriteVersionInfoTaskShouldNotLogOutputVariablesToBuildOutputWhenRunW } [Test] - [Category(NoNet48)] - [Category(NoMono)] public void WriteVersionInfoTaskShouldLogOutputVariablesToBuildOutputWhenRunWithMsBuildInAzurePipeline() { const string taskName = nameof(WriteVersionInfoToBuildLog); - using var result = ExecuteMsBuildExeInAzurePipeline(project => AddWriteVersionInfoToBuildLogTask(project, taskName, taskName)); + using var result = ExecuteMsBuildExeInAzurePipeline(project => + AddWriteVersionInfoToBuildLogTask(project, taskName, taskName)); result.ProjectPath.ShouldNotBeNullOrWhiteSpace(); result.MsBuild.Count.ShouldBeGreaterThan(0); result.MsBuild.OverallSuccess.ShouldBe(true); result.MsBuild.ShouldAllBe(x => x.Succeeded); result.Output.ShouldNotBeNullOrWhiteSpace(); - result.Output.ShouldContain("##vso[task.setvariable variable=GitVersion.FullSemVer]1.0.1+1"); + result.Output.ShouldContain("##vso[task.setvariable variable=GitVersion.FullSemVer]1.0.1-1"); } private static void AddWriteVersionInfoToBuildLogTask(ProjectCreator project, string targetToRun, string taskName) diff --git a/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj b/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj index 016c11a751..15a1149d90 100644 --- a/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj +++ b/src/GitVersion.MsBuild/GitVersion.MsBuild.csproj @@ -1,8 +1,6 @@ - netstandard2.0 - GitVersion.MsBuild Codestin Search App 0.0.1-alpha-0001 @@ -10,24 +8,39 @@ false true true + + bin/$(Configuration) + ../GitVersion.App/$(BinPath) - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - + + + + + - + + + + + - + + + + + + + + + + + + + diff --git a/src/GitVersion.MsBuild/GitVersionMsBuildModule.cs b/src/GitVersion.MsBuild/GitVersionMsBuildModule.cs new file mode 100644 index 0000000000..0d314115ca --- /dev/null +++ b/src/GitVersion.MsBuild/GitVersionMsBuildModule.cs @@ -0,0 +1,8 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace GitVersion.MsBuild; + +public class GitVersionMsBuildModule : IGitVersionModule +{ + public void RegisterTypes(IServiceCollection services) => services.AddSingleton(); +} diff --git a/src/GitVersion.MsBuild/GitVersionTaskBase.cs b/src/GitVersion.MsBuild/GitVersionTaskBase.cs index 4af337e7d7..1be2bafb80 100644 --- a/src/GitVersion.MsBuild/GitVersionTaskBase.cs +++ b/src/GitVersion.MsBuild/GitVersionTaskBase.cs @@ -1,5 +1,6 @@ using Microsoft.Build.Framework; using Microsoft.Build.Utilities; +using Microsoft.Extensions.DependencyInjection; namespace GitVersion.MsBuild; @@ -8,7 +9,7 @@ public abstract class GitVersionTaskBase : ITask public IBuildEngine BuildEngine { get; set; } public ITaskHost HostObject { get; set; } - protected GitVersionTaskBase() => Log = new TaskLoggingHelper(this); + protected GitVersionTaskBase() => Log = new(this); [Required] public string SolutionDirectory { get; set; } @@ -20,4 +21,8 @@ public abstract class GitVersionTaskBase : ITask public bool Execute() => OnExecute(); protected abstract bool OnExecute(); + + public Action? Overrides { get; set; } + + public void WithOverrides(Action overrides) => Overrides = overrides; } diff --git a/src/GitVersion.MsBuild/GitVersionTaskExecutor.cs b/src/GitVersion.MsBuild/GitVersionTaskExecutor.cs index 1f0e9dcebc..9252d5a6b5 100644 --- a/src/GitVersion.MsBuild/GitVersionTaskExecutor.cs +++ b/src/GitVersion.MsBuild/GitVersionTaskExecutor.cs @@ -1,3 +1,4 @@ +using GitVersion.Configuration; using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.MsBuild.Tasks; @@ -6,22 +7,23 @@ namespace GitVersion.MsBuild; -public class GitVersionTaskExecutor : IGitVersionTaskExecutor +internal class GitVersionTaskExecutor( + IFileSystem fileSystem, + IGitVersionOutputTool gitVersionOutputTool, + IVersionVariableSerializer serializer, + IConfigurationProvider configurationProvider, + IOptions options) + : IGitVersionTaskExecutor { - private readonly IFileSystem fileSystem; - private readonly IGitVersionOutputTool gitVersionOutputTool; - private readonly IOptions options; - - public GitVersionTaskExecutor(IFileSystem fileSystem, IGitVersionOutputTool gitVersionOutputTool, IOptions options) - { - this.fileSystem = fileSystem.NotNull(); - this.gitVersionOutputTool = gitVersionOutputTool.NotNull(); - this.options = options.NotNull(); - } + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly IGitVersionOutputTool gitVersionOutputTool = gitVersionOutputTool.NotNull(); + private readonly IVersionVariableSerializer serializer = serializer.NotNull(); + private readonly IConfigurationProvider configurationProvider = configurationProvider.NotNull(); + private readonly IOptions options = options.NotNull(); public void GetVersion(GetVersion task) { - var versionVariables = VersionVariables.FromFile(task.VersionFile, fileSystem); + var versionVariables = GitVersionVariables(task); var outputType = typeof(GetVersion); foreach (var (key, value) in versionVariables) { @@ -31,7 +33,7 @@ public void GetVersion(GetVersion task) public void UpdateAssemblyInfo(UpdateAssemblyInfo task) { - var versionVariables = VersionVariables.FromFile(task.VersionFile, fileSystem); + var versionVariables = GitVersionVariables(task); FileHelper.DeleteTempFiles(); FileHelper.CheckForInvalidFiles(task.CompileFiles, task.ProjectFile); @@ -45,17 +47,17 @@ public void UpdateAssemblyInfo(UpdateAssemblyInfo task) task.AssemblyInfoTempFilePath = PathHelper.Combine(fileWriteInfo.WorkingDirectory, fileWriteInfo.FileName); var gitVersionOptions = this.options.Value; - gitVersionOptions.AssemblyInfo.UpdateAssemblyInfo = true; - gitVersionOptions.AssemblyInfo.EnsureAssemblyInfo = true; gitVersionOptions.WorkingDirectory = fileWriteInfo.WorkingDirectory; - gitVersionOptions.AssemblyInfo.Files.Add(fileWriteInfo.FileName); + gitVersionOptions.AssemblySettingsInfo.UpdateAssemblyInfo = true; + gitVersionOptions.AssemblySettingsInfo.EnsureAssemblyInfo = true; + gitVersionOptions.AssemblySettingsInfo.Files.Add(fileWriteInfo.FileName); gitVersionOutputTool.UpdateAssemblyInfo(versionVariables); } public void GenerateGitVersionInformation(GenerateGitVersionInformation task) { - var versionVariables = VersionVariables.FromFile(task.VersionFile, fileSystem); + var versionVariables = GitVersionVariables(task); if (!string.IsNullOrEmpty(task.IntermediateOutputPath)) { @@ -68,13 +70,35 @@ public void GenerateGitVersionInformation(GenerateGitVersionInformation task) var gitVersionOptions = this.options.Value; gitVersionOptions.WorkingDirectory = fileWriteInfo.WorkingDirectory; + var targetNamespace = GetTargetNamespace(task); + gitVersionOutputTool.GenerateGitVersionInformation(versionVariables, fileWriteInfo, targetNamespace); + return; + + static string? GetTargetNamespace(GenerateGitVersionInformation task) + { + string? targetNamespace = null; + if (bool.TryParse(task.UseProjectNamespaceForGitVersionInformation, out var useTargetPathAsRootNamespace) && useTargetPathAsRootNamespace) + { + targetNamespace = task.RootNamespace; + if (string.IsNullOrWhiteSpace(targetNamespace)) + { + targetNamespace = Path.GetFileNameWithoutExtension(task.ProjectFile); + } + } - gitVersionOutputTool.GenerateGitVersionInformation(versionVariables, fileWriteInfo); + return targetNamespace; + } } public void WriteVersionInfoToBuildLog(WriteVersionInfoToBuildLog task) { - var versionVariables = VersionVariables.FromFile(task.VersionFile, fileSystem); - gitVersionOutputTool.OutputVariables(versionVariables, false); + var versionVariables = GitVersionVariables(task); + + var gitVersionOptions = this.options.Value; + var configuration = this.configurationProvider.Provide(gitVersionOptions.ConfigurationInfo.OverrideConfiguration); + + gitVersionOutputTool.OutputVariables(versionVariables, configuration.UpdateBuildNumber); } + + private GitVersionVariables GitVersionVariables(GitVersionTaskBase task) => serializer.FromFile(task.VersionFile); } diff --git a/src/GitVersion.MsBuild/GitVersionTaskModule.cs b/src/GitVersion.MsBuild/GitVersionTaskModule.cs deleted file mode 100644 index 7d334c14a4..0000000000 --- a/src/GitVersion.MsBuild/GitVersionTaskModule.cs +++ /dev/null @@ -1,34 +0,0 @@ -using GitVersion.BuildAgents; -using GitVersion.Extensions; -using GitVersion.Logging; -using GitVersion.VersionConverters.AssemblyInfo; -using GitVersion.VersionConverters.GitVersionInfo; -using GitVersion.VersionConverters.OutputGenerator; -using GitVersion.VersionConverters.WixUpdater; -using Microsoft.Extensions.DependencyInjection; - -namespace GitVersion.MsBuild; - -public class GitVersionTaskModule : IGitVersionModule -{ - public void RegisterTypes(IServiceCollection services) - { - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - - services.AddSingleton(); - - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - - services.AddSingleton(); - services.AddModule(new BuildServerModule()); - services.AddSingleton(sp => sp.GetRequiredService().Resolve()); - } -} diff --git a/src/GitVersion.MsBuild/GitVersionTasks.cs b/src/GitVersion.MsBuild/GitVersionTasks.cs index 577ab6c65d..c2facf75d9 100644 --- a/src/GitVersion.MsBuild/GitVersionTasks.cs +++ b/src/GitVersion.MsBuild/GitVersionTasks.cs @@ -1,14 +1,15 @@ -using GitVersion.BuildAgents; +using GitVersion.Agents; +using GitVersion.Configuration; using GitVersion.Extensions; using GitVersion.Logging; -using GitVersion.Model; using GitVersion.MsBuild.Tasks; +using GitVersion.Output; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; namespace GitVersion.MsBuild; -public static class GitVersionTasks +internal static class GitVersionTasks { public static bool GetVersion(GetVersion task) => ExecuteGitVersionTask(task, executor => executor.GetVersion(task)); @@ -67,12 +68,14 @@ private static IServiceProvider BuildServiceProvider(GitVersionTaskBase task) WorkingDirectory = task.SolutionDirectory }; - gitVersionOptions.Output.Add(OutputType.BuildServer); - services.AddSingleton(Options.Create(gitVersionOptions)); - services.AddModule(new GitVersionTaskModule()); - + services.AddModule(new GitVersionConfigurationModule()); + services.AddModule(new GitVersionCoreModule()); + services.AddModule(new GitVersionBuildAgentsModule()); + services.AddModule(new GitVersionOutputModule()); + services.AddModule(new GitVersionMsBuildModule()); services.AddSingleton(new MsBuildAdapter(task.Log)); + task.Overrides?.Invoke(services); var sp = services.BuildServiceProvider(); Configure(sp, task); diff --git a/src/GitVersion.MsBuild/Helpers/FileHelper.cs b/src/GitVersion.MsBuild/Helpers/FileHelper.cs index dee009e256..10618dc116 100644 --- a/src/GitVersion.MsBuild/Helpers/FileHelper.cs +++ b/src/GitVersion.MsBuild/Helpers/FileHelper.cs @@ -4,7 +4,7 @@ namespace GitVersion.MsBuild; -public static class FileHelper +internal static class FileHelper { private static readonly Dictionary> VersionAttributeFinders = new() { @@ -51,6 +51,14 @@ public static void DeleteTempFiles() _ => throw new ArgumentException($"Unknown language detected: '{language}'") }; + public static string GetProjectExtension(string language) => language switch + { + "C#" => "csproj", + "F#" => "fsproj", + "VB" => "vbproj", + _ => throw new ArgumentException($"Unknown language detected: '{language}'") + }; + public static void CheckForInvalidFiles(IEnumerable compileFiles, string projectFile) { if (GetInvalidFiles(compileFiles, projectFile).FirstOrDefault() is { } invalidCompileFile) @@ -76,7 +84,7 @@ private static bool CSharpFileContainsVersionAttribute(string compileFile, strin var combine = PathHelper.Combine(Path.GetDirectoryName(projectFile), compileFile); var allText = File.ReadAllText(combine); - allText += System.Environment.NewLine; // Always add a new line, this handles the case for when a file ends with the EOF marker and no new line. If you don't have this newline, the regex will match commented out Assembly*Version tags on the last line. + allText += PathHelper.NewLine; // Always add a new line, this handles the case for when a file ends with the EOF marker and no new line. If you don't have this newline, the regex will match commented out Assembly*Version tags on the last line. const string blockComments = @"/\*(.*?)\*/"; const string lineComments = @"//(.*?)\r?\n"; @@ -85,7 +93,7 @@ private static bool CSharpFileContainsVersionAttribute(string compileFile, strin var noCommentsOrStrings = Regex.Replace(allText, blockComments + "|" + lineComments + "|" + strings + "|" + verbatimStrings, - me => me.Value.StartsWith("//") ? System.Environment.NewLine : string.Empty, + me => me.Value.StartsWith("//") ? PathHelper.NewLine : string.Empty, RegexOptions.Singleline); return Regex.IsMatch(noCommentsOrStrings, @"(?x) # IgnorePatternWhitespace @@ -104,14 +112,14 @@ private static bool VisualBasicFileContainsVersionAttribute(string compileFile, var combine = PathHelper.Combine(Path.GetDirectoryName(projectFile), compileFile); var allText = File.ReadAllText(combine); - allText += System.Environment.NewLine; // Always add a new line, this handles the case for when a file ends with the EOF marker and no new line. If you don't have this newline, the regex will match commented out Assembly*Version tags on the last line. + allText += PathHelper.NewLine; // Always add a new line, this handles the case for when a file ends with the EOF marker and no new line. If you don't have this newline, the regex will match commented out Assembly*Version tags on the last line. const string lineComments = @"'(.*?)\r?\n"; const string strings = @"""((\\[^\n]|[^""\n])*)"""; var noCommentsOrStrings = Regex.Replace(allText, lineComments + "|" + strings, - me => me.Value.StartsWith("'") ? System.Environment.NewLine : string.Empty, + me => me.Value.StartsWith("'") ? PathHelper.NewLine : string.Empty, RegexOptions.Singleline); return Regex.IsMatch(noCommentsOrStrings, @"(?x) # IgnorePatternWhitespace diff --git a/src/GitVersion.MsBuild/Helpers/MsBuildAdapter.cs b/src/GitVersion.MsBuild/Helpers/MsBuildAdapter.cs index d3856d9859..7acb755607 100644 --- a/src/GitVersion.MsBuild/Helpers/MsBuildAdapter.cs +++ b/src/GitVersion.MsBuild/Helpers/MsBuildAdapter.cs @@ -1,23 +1,20 @@ +using GitVersion.Helpers; using GitVersion.Logging; using Microsoft.Build.Utilities; namespace GitVersion.MsBuild; -internal class MsBuildAdapter : IConsole +internal class MsBuildAdapter(TaskLoggingHelper taskLog) : IConsole { - private readonly TaskLoggingHelper taskLog; - - public MsBuildAdapter(TaskLoggingHelper taskLog) => this.taskLog = taskLog; - public void WriteLine(string? msg) { Write(msg); WriteLine(); } - public void WriteLine() => this.taskLog.LogMessage("\n"); + public void WriteLine() => taskLog.LogMessage("\n"); - public void Write(string? msg) => this.taskLog.LogMessage(msg); + public void Write(string? msg) => taskLog.LogMessage(msg); public string? ReadLine() => Console.ReadLine(); diff --git a/src/GitVersion.MsBuild/Helpers/MsBuildAppender.cs b/src/GitVersion.MsBuild/Helpers/MsBuildAppender.cs index 7c6d0fa103..8b6fbd9fdd 100644 --- a/src/GitVersion.MsBuild/Helpers/MsBuildAppender.cs +++ b/src/GitVersion.MsBuild/Helpers/MsBuildAppender.cs @@ -1,21 +1,18 @@ +using GitVersion.Helpers; using GitVersion.Logging; using Microsoft.Build.Utilities; namespace GitVersion.MsBuild; -public class MsBuildAppender : ILogAppender +internal class MsBuildAppender(TaskLoggingHelper taskLog) : ILogAppender { - private readonly TaskLoggingHelper taskLog; - - public MsBuildAppender(TaskLoggingHelper taskLog) => this.taskLog = taskLog; - public void WriteTo(LogLevel level, string message) { try { WriteLogEntry(level, message); } - catch (Exception) + catch { // } @@ -23,20 +20,20 @@ public void WriteTo(LogLevel level, string message) private void WriteLogEntry(LogLevel level, string str) { - var contents = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}\t\t{str}{System.Environment.NewLine}"; + var contents = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss}\t\t{str}{PathHelper.NewLine}"; switch (level) { case LogLevel.Fatal: case LogLevel.Error: - this.taskLog.LogError(contents); + taskLog.LogError(contents); break; case LogLevel.Warn: - this.taskLog.LogWarning(contents); + taskLog.LogWarning(contents); break; case LogLevel.Info: case LogLevel.Verbose: case LogLevel.Debug: - this.taskLog.LogMessage(contents); + taskLog.LogMessage(contents); break; default: throw new ArgumentOutOfRangeException(nameof(level), level, null); diff --git a/src/GitVersion.MsBuild/IGitVersionTaskExecutor.cs b/src/GitVersion.MsBuild/IGitVersionTaskExecutor.cs index 520496d583..9d27348723 100644 --- a/src/GitVersion.MsBuild/IGitVersionTaskExecutor.cs +++ b/src/GitVersion.MsBuild/IGitVersionTaskExecutor.cs @@ -2,7 +2,7 @@ namespace GitVersion.MsBuild; -public interface IGitVersionTaskExecutor +internal interface IGitVersionTaskExecutor { void GetVersion(GetVersion task); void UpdateAssemblyInfo(UpdateAssemblyInfo task); diff --git a/src/GitVersion.MsBuild/PublicAPI.Shipped.txt b/src/GitVersion.MsBuild/PublicAPI.Shipped.txt index 452c036fcc..7dc5c58110 100644 --- a/src/GitVersion.MsBuild/PublicAPI.Shipped.txt +++ b/src/GitVersion.MsBuild/PublicAPI.Shipped.txt @@ -1,138 +1 @@ #nullable enable -abstract GitVersion.MsBuild.GitVersionTaskBase.OnExecute() -> bool -GitVersion.MsBuild.FileHelper -GitVersion.MsBuild.GitVersionTaskBase -GitVersion.MsBuild.GitVersionTaskBase.BuildEngine.get -> Microsoft.Build.Framework.IBuildEngine! -GitVersion.MsBuild.GitVersionTaskBase.BuildEngine.set -> void -GitVersion.MsBuild.GitVersionTaskBase.Execute() -> bool -GitVersion.MsBuild.GitVersionTaskBase.GitVersionTaskBase() -> void -GitVersion.MsBuild.GitVersionTaskBase.HostObject.get -> Microsoft.Build.Framework.ITaskHost! -GitVersion.MsBuild.GitVersionTaskBase.HostObject.set -> void -GitVersion.MsBuild.GitVersionTaskBase.Log.get -> Microsoft.Build.Utilities.TaskLoggingHelper! -GitVersion.MsBuild.GitVersionTaskBase.SolutionDirectory.get -> string! -GitVersion.MsBuild.GitVersionTaskBase.SolutionDirectory.set -> void -GitVersion.MsBuild.GitVersionTaskBase.VersionFile.get -> string! -GitVersion.MsBuild.GitVersionTaskBase.VersionFile.set -> void -GitVersion.MsBuild.GitVersionTaskExecutor -GitVersion.MsBuild.GitVersionTaskExecutor.GenerateGitVersionInformation(GitVersion.MsBuild.Tasks.GenerateGitVersionInformation! task) -> void -GitVersion.MsBuild.GitVersionTaskExecutor.GetVersion(GitVersion.MsBuild.Tasks.GetVersion! task) -> void -GitVersion.MsBuild.GitVersionTaskExecutor.GitVersionTaskExecutor(GitVersion.IFileSystem! fileSystem, GitVersion.IGitVersionOutputTool! gitVersionOutputTool, Microsoft.Extensions.Options.IOptions! options) -> void -GitVersion.MsBuild.GitVersionTaskExecutor.UpdateAssemblyInfo(GitVersion.MsBuild.Tasks.UpdateAssemblyInfo! task) -> void -GitVersion.MsBuild.GitVersionTaskExecutor.WriteVersionInfoToBuildLog(GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog! task) -> void -GitVersion.MsBuild.GitVersionTaskModule -GitVersion.MsBuild.GitVersionTaskModule.GitVersionTaskModule() -> void -GitVersion.MsBuild.GitVersionTaskModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void -GitVersion.MsBuild.GitVersionTasks -GitVersion.MsBuild.IGitVersionTaskExecutor -GitVersion.MsBuild.IGitVersionTaskExecutor.GenerateGitVersionInformation(GitVersion.MsBuild.Tasks.GenerateGitVersionInformation! task) -> void -GitVersion.MsBuild.IGitVersionTaskExecutor.GetVersion(GitVersion.MsBuild.Tasks.GetVersion! task) -> void -GitVersion.MsBuild.IGitVersionTaskExecutor.UpdateAssemblyInfo(GitVersion.MsBuild.Tasks.UpdateAssemblyInfo! task) -> void -GitVersion.MsBuild.IGitVersionTaskExecutor.WriteVersionInfoToBuildLog(GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog! task) -> void -GitVersion.MsBuild.MsBuildAppender -GitVersion.MsBuild.MsBuildAppender.MsBuildAppender(Microsoft.Build.Utilities.TaskLoggingHelper! taskLog) -> void -GitVersion.MsBuild.MsBuildAppender.WriteTo(GitVersion.Logging.LogLevel level, string! message) -> void -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GenerateGitVersionInformation() -> void -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GitVersionInformationFilePath.get -> string! -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GitVersionInformationFilePath.set -> void -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.IntermediateOutputPath.get -> string! -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.IntermediateOutputPath.set -> void -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.Language.get -> string! -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.Language.set -> void -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.ProjectFile.get -> string! -GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.ProjectFile.set -> void -GitVersion.MsBuild.Tasks.GetVersion -GitVersion.MsBuild.Tasks.GetVersion.AssemblySemFileVer.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.AssemblySemFileVer.set -> void -GitVersion.MsBuild.Tasks.GetVersion.AssemblySemVer.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.AssemblySemVer.set -> void -GitVersion.MsBuild.Tasks.GetVersion.BranchName.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.BranchName.set -> void -GitVersion.MsBuild.Tasks.GetVersion.BuildMetaData.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.BuildMetaData.set -> void -GitVersion.MsBuild.Tasks.GetVersion.BuildMetaDataPadded.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.BuildMetaDataPadded.set -> void -GitVersion.MsBuild.Tasks.GetVersion.CommitDate.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.CommitDate.set -> void -GitVersion.MsBuild.Tasks.GetVersion.CommitsSinceVersionSource.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.CommitsSinceVersionSource.set -> void -GitVersion.MsBuild.Tasks.GetVersion.CommitsSinceVersionSourcePadded.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.CommitsSinceVersionSourcePadded.set -> void -GitVersion.MsBuild.Tasks.GetVersion.EscapedBranchName.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.EscapedBranchName.set -> void -GitVersion.MsBuild.Tasks.GetVersion.FullBuildMetaData.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.FullBuildMetaData.set -> void -GitVersion.MsBuild.Tasks.GetVersion.FullSemVer.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.FullSemVer.set -> void -GitVersion.MsBuild.Tasks.GetVersion.GetVersion() -> void -GitVersion.MsBuild.Tasks.GetVersion.InformationalVersion.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.InformationalVersion.set -> void -GitVersion.MsBuild.Tasks.GetVersion.LegacySemVer.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.LegacySemVer.set -> void -GitVersion.MsBuild.Tasks.GetVersion.LegacySemVerPadded.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.LegacySemVerPadded.set -> void -GitVersion.MsBuild.Tasks.GetVersion.Major.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.Major.set -> void -GitVersion.MsBuild.Tasks.GetVersion.MajorMinorPatch.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.MajorMinorPatch.set -> void -GitVersion.MsBuild.Tasks.GetVersion.Minor.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.Minor.set -> void -GitVersion.MsBuild.Tasks.GetVersion.NuGetPreReleaseTag.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.NuGetPreReleaseTag.set -> void -GitVersion.MsBuild.Tasks.GetVersion.NuGetPreReleaseTagV2.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.NuGetPreReleaseTagV2.set -> void -GitVersion.MsBuild.Tasks.GetVersion.NuGetVersion.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.NuGetVersion.set -> void -GitVersion.MsBuild.Tasks.GetVersion.NuGetVersionV2.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.NuGetVersionV2.set -> void -GitVersion.MsBuild.Tasks.GetVersion.Patch.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.Patch.set -> void -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabel.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabel.set -> void -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabelWithDash.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabelWithDash.set -> void -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseNumber.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseNumber.set -> void -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTag.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTag.set -> void -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTagWithDash.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTagWithDash.set -> void -GitVersion.MsBuild.Tasks.GetVersion.SemVer.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.SemVer.set -> void -GitVersion.MsBuild.Tasks.GetVersion.Sha.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.Sha.set -> void -GitVersion.MsBuild.Tasks.GetVersion.ShortSha.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.ShortSha.set -> void -GitVersion.MsBuild.Tasks.GetVersion.UncommittedChanges.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.UncommittedChanges.set -> void -GitVersion.MsBuild.Tasks.GetVersion.VersionSourceSha.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.VersionSourceSha.set -> void -GitVersion.MsBuild.Tasks.GetVersion.WeightedPreReleaseNumber.get -> string! -GitVersion.MsBuild.Tasks.GetVersion.WeightedPreReleaseNumber.set -> void -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.AssemblyInfoTempFilePath.get -> string! -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.AssemblyInfoTempFilePath.set -> void -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.CompileFiles.get -> Microsoft.Build.Framework.ITaskItem![]! -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.CompileFiles.set -> void -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.IntermediateOutputPath.get -> string! -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.IntermediateOutputPath.set -> void -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.Language.get -> string! -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.Language.set -> void -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.ProjectFile.get -> string! -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.ProjectFile.set -> void -GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.UpdateAssemblyInfo() -> void -GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog -GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog.WriteVersionInfoToBuildLog() -> void -override GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.OnExecute() -> bool -override GitVersion.MsBuild.Tasks.GetVersion.OnExecute() -> bool -override GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.OnExecute() -> bool -override GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog.OnExecute() -> bool -static GitVersion.MsBuild.FileHelper.CheckForInvalidFiles(System.Collections.Generic.IEnumerable! compileFiles, string! projectFile) -> void -static GitVersion.MsBuild.FileHelper.DeleteTempFiles() -> void -static GitVersion.MsBuild.FileHelper.GetFileExtension(string! language) -> string! -static GitVersion.MsBuild.FileHelper.GetFileWriteInfo(this string? intermediateOutputPath, string! language, string! projectFile, string! outputFileName) -> GitVersion.FileWriteInfo! -static GitVersion.MsBuild.GitVersionTasks.GenerateGitVersionInformation(GitVersion.MsBuild.Tasks.GenerateGitVersionInformation! task) -> bool -static GitVersion.MsBuild.GitVersionTasks.GetVersion(GitVersion.MsBuild.Tasks.GetVersion! task) -> bool -static GitVersion.MsBuild.GitVersionTasks.UpdateAssemblyInfo(GitVersion.MsBuild.Tasks.UpdateAssemblyInfo! task) -> bool -static GitVersion.MsBuild.GitVersionTasks.WriteVersionInfoToBuildLog(GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog! task) -> bool -static readonly GitVersion.MsBuild.FileHelper.TempPath -> string! diff --git a/src/GitVersion.MsBuild/PublicAPI.Unshipped.txt b/src/GitVersion.MsBuild/PublicAPI.Unshipped.txt index e69de29bb2..56f89d7613 100644 --- a/src/GitVersion.MsBuild/PublicAPI.Unshipped.txt +++ b/src/GitVersion.MsBuild/PublicAPI.Unshipped.txt @@ -0,0 +1,104 @@ +#nullable enable +GitVersion.MsBuild.GitVersionMsBuildModule +GitVersion.MsBuild.GitVersionMsBuildModule.GitVersionMsBuildModule() -> void +GitVersion.MsBuild.GitVersionMsBuildModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void +GitVersion.MsBuild.GitVersionTaskBase +GitVersion.MsBuild.GitVersionTaskBase.BuildEngine.get -> Microsoft.Build.Framework.IBuildEngine! +GitVersion.MsBuild.GitVersionTaskBase.BuildEngine.set -> void +GitVersion.MsBuild.GitVersionTaskBase.Execute() -> bool +GitVersion.MsBuild.GitVersionTaskBase.GitVersionTaskBase() -> void +GitVersion.MsBuild.GitVersionTaskBase.HostObject.get -> Microsoft.Build.Framework.ITaskHost! +GitVersion.MsBuild.GitVersionTaskBase.HostObject.set -> void +GitVersion.MsBuild.GitVersionTaskBase.Log.get -> Microsoft.Build.Utilities.TaskLoggingHelper! +GitVersion.MsBuild.GitVersionTaskBase.Overrides.get -> System.Action? +GitVersion.MsBuild.GitVersionTaskBase.Overrides.set -> void +GitVersion.MsBuild.GitVersionTaskBase.SolutionDirectory.get -> string! +GitVersion.MsBuild.GitVersionTaskBase.SolutionDirectory.set -> void +GitVersion.MsBuild.GitVersionTaskBase.VersionFile.get -> string! +GitVersion.MsBuild.GitVersionTaskBase.VersionFile.set -> void +GitVersion.MsBuild.GitVersionTaskBase.WithOverrides(System.Action! overrides) -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GenerateGitVersionInformation() -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GitVersionInformationFilePath.get -> string! +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.GitVersionInformationFilePath.set -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.IntermediateOutputPath.get -> string! +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.IntermediateOutputPath.set -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.Language.get -> string! +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.Language.set -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.ProjectFile.get -> string! +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.ProjectFile.set -> void +GitVersion.MsBuild.Tasks.GetVersion +GitVersion.MsBuild.Tasks.GetVersion.AssemblySemFileVer.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.AssemblySemFileVer.set -> void +GitVersion.MsBuild.Tasks.GetVersion.AssemblySemVer.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.AssemblySemVer.set -> void +GitVersion.MsBuild.Tasks.GetVersion.BranchName.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.BranchName.set -> void +GitVersion.MsBuild.Tasks.GetVersion.BuildMetaData.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.BuildMetaData.set -> void +GitVersion.MsBuild.Tasks.GetVersion.CommitDate.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.CommitDate.set -> void +GitVersion.MsBuild.Tasks.GetVersion.CommitsSinceVersionSource.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.CommitsSinceVersionSource.set -> void +GitVersion.MsBuild.Tasks.GetVersion.EscapedBranchName.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.EscapedBranchName.set -> void +GitVersion.MsBuild.Tasks.GetVersion.FullBuildMetaData.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.FullBuildMetaData.set -> void +GitVersion.MsBuild.Tasks.GetVersion.FullSemVer.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.FullSemVer.set -> void +GitVersion.MsBuild.Tasks.GetVersion.GetVersion() -> void +GitVersion.MsBuild.Tasks.GetVersion.InformationalVersion.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.InformationalVersion.set -> void +GitVersion.MsBuild.Tasks.GetVersion.Major.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.Major.set -> void +GitVersion.MsBuild.Tasks.GetVersion.MajorMinorPatch.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.MajorMinorPatch.set -> void +GitVersion.MsBuild.Tasks.GetVersion.Minor.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.Minor.set -> void +GitVersion.MsBuild.Tasks.GetVersion.Patch.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.Patch.set -> void +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabel.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabel.set -> void +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabelWithDash.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseLabelWithDash.set -> void +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseNumber.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseNumber.set -> void +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTag.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTag.set -> void +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTagWithDash.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.PreReleaseTagWithDash.set -> void +GitVersion.MsBuild.Tasks.GetVersion.SemVer.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.SemVer.set -> void +GitVersion.MsBuild.Tasks.GetVersion.Sha.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.Sha.set -> void +GitVersion.MsBuild.Tasks.GetVersion.ShortSha.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.ShortSha.set -> void +GitVersion.MsBuild.Tasks.GetVersion.UncommittedChanges.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.UncommittedChanges.set -> void +GitVersion.MsBuild.Tasks.GetVersion.VersionSourceSha.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.VersionSourceSha.set -> void +GitVersion.MsBuild.Tasks.GetVersion.WeightedPreReleaseNumber.get -> string! +GitVersion.MsBuild.Tasks.GetVersion.WeightedPreReleaseNumber.set -> void +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.AssemblyInfoTempFilePath.get -> string! +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.AssemblyInfoTempFilePath.set -> void +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.CompileFiles.get -> Microsoft.Build.Framework.ITaskItem![]! +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.CompileFiles.set -> void +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.IntermediateOutputPath.get -> string! +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.IntermediateOutputPath.set -> void +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.Language.get -> string! +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.Language.set -> void +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.ProjectFile.get -> string! +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.ProjectFile.set -> void +GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.UpdateAssemblyInfo() -> void +GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog +GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog.WriteVersionInfoToBuildLog() -> void +abstract GitVersion.MsBuild.GitVersionTaskBase.OnExecute() -> bool +override GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.OnExecute() -> bool +override GitVersion.MsBuild.Tasks.GetVersion.OnExecute() -> bool +override GitVersion.MsBuild.Tasks.UpdateAssemblyInfo.OnExecute() -> bool +override GitVersion.MsBuild.Tasks.WriteVersionInfoToBuildLog.OnExecute() -> bool +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.UseProjectNamespaceForGitVersionInformation.get -> string? +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.UseProjectNamespaceForGitVersionInformation.set -> void +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.RootNamespace.get -> string! +GitVersion.MsBuild.Tasks.GenerateGitVersionInformation.RootNamespace.set -> void diff --git a/src/GitVersion.MsBuild/Tasks/GenerateGitVersionInformation.cs b/src/GitVersion.MsBuild/Tasks/GenerateGitVersionInformation.cs index ebebf91f66..92c0fb95af 100644 --- a/src/GitVersion.MsBuild/Tasks/GenerateGitVersionInformation.cs +++ b/src/GitVersion.MsBuild/Tasks/GenerateGitVersionInformation.cs @@ -13,9 +13,12 @@ public class GenerateGitVersionInformation : GitVersionTaskBase [Required] public string Language { get; set; } = "C#"; + public string? UseProjectNamespaceForGitVersionInformation { get; set; } + + public string RootNamespace { get; set; } + [Output] public string GitVersionInformationFilePath { get; set; } protected override bool OnExecute() => GitVersionTasks.GenerateGitVersionInformation(this); - } diff --git a/src/GitVersion.MsBuild/Tasks/GetVersion.cs b/src/GitVersion.MsBuild/Tasks/GetVersion.cs index 74f56e2df5..3fca217eef 100644 --- a/src/GitVersion.MsBuild/Tasks/GetVersion.cs +++ b/src/GitVersion.MsBuild/Tasks/GetVersion.cs @@ -34,9 +34,6 @@ public class GetVersion : GitVersionTaskBase [Output] public string BuildMetaData { get; set; } - [Output] - public string BuildMetaDataPadded { get; set; } - [Output] public string FullBuildMetaData { get; set; } @@ -46,12 +43,6 @@ public class GetVersion : GitVersionTaskBase [Output] public string SemVer { get; set; } - [Output] - public string LegacySemVer { get; set; } - - [Output] - public string LegacySemVerPadded { get; set; } - [Output] public string AssemblySemVer { get; set; } @@ -76,18 +67,6 @@ public class GetVersion : GitVersionTaskBase [Output] public string ShortSha { get; set; } - [Output] - public string NuGetVersionV2 { get; set; } - - [Output] - public string NuGetVersion { get; set; } - - [Output] - public string NuGetPreReleaseTagV2 { get; set; } - - [Output] - public string NuGetPreReleaseTag { get; set; } - [Output] public string CommitDate { get; set; } @@ -97,10 +76,6 @@ public class GetVersion : GitVersionTaskBase [Output] public string CommitsSinceVersionSource { get; set; } - [Output] - public string CommitsSinceVersionSourcePadded { get; set; } - - [Output] public string UncommittedChanges { get; set; } diff --git a/src/GitVersion.MsBuild/Tasks/UpdateAssemblyInfo.cs b/src/GitVersion.MsBuild/Tasks/UpdateAssemblyInfo.cs index 127ebbd1de..41fefe580d 100644 --- a/src/GitVersion.MsBuild/Tasks/UpdateAssemblyInfo.cs +++ b/src/GitVersion.MsBuild/Tasks/UpdateAssemblyInfo.cs @@ -11,7 +11,7 @@ public class UpdateAssemblyInfo : GitVersionTaskBase public string IntermediateOutputPath { get; set; } [Required] - public ITaskItem[] CompileFiles { get; set; } = Array.Empty(); + public ITaskItem[] CompileFiles { get; set; } = []; [Required] public string Language { get; set; } = "C#"; diff --git a/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.props index bbccf450d2..53a710d932 100644 --- a/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.props +++ b/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.props @@ -1,4 +1,5 @@ + - + diff --git a/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.targets index bbccf450d2..53a710d932 100644 --- a/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.targets +++ b/src/GitVersion.MsBuild/msbuild/build/GitVersion.MsBuild.targets @@ -1,4 +1,5 @@ + - + diff --git a/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.props index bbccf450d2..53a710d932 100644 --- a/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.props +++ b/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.props @@ -1,4 +1,5 @@ + - + diff --git a/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.targets index bbccf450d2..53a710d932 100644 --- a/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.targets +++ b/src/GitVersion.MsBuild/msbuild/buildMultiTargeting/GitVersion.MsBuild.targets @@ -1,4 +1,5 @@ + - + diff --git a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props index e102c29e34..e1f335e940 100644 --- a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props +++ b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props @@ -4,7 +4,6 @@ $([MSBuild]::EnsureTrailingSlash($(BaseIntermediateOutputPath)))gitversion.json - C# $(MSBuildProjectDirectory)/../ $(SolutionDir) $(MSBuildProjectDirectory) @@ -13,23 +12,19 @@ false false - $(GitVersion_CommandLineArguments) -output file -outputfile $(GitVersionOutputFile) + $(GitVersion_CommandLineArguments) -output file -outputfile "$(GitVersionOutputFile)" $(GitVersion_ToolArgments) -nofetch $(GitVersion_ToolArgments) -nonormalize $(GitVersion_ToolArgments) -nocache - - "$(MSBuildThisFileDirectory)net48/gitversion.exe" - $(MSBuildThisFileDirectory)net48/GitVersion.MsBuild.dll - - - - dotnet --roll-forward Major "$(MSBuildThisFileDirectory)netcoreapp3.1/gitversion.dll" - $(MSBuildThisFileDirectory)netcoreapp3.1/GitVersion.MsBuild.dll - - + + true + false @@ -38,7 +33,7 @@ false - true + true false false false @@ -53,7 +48,7 @@ (The global property "_TargetAssemblyProjectName" is injected by XAML's above-mentioned task) --> false - true + true - - - - - - - + + <_GeneratedCodeFiles Include="$(GitVersionInformationFilePath)" /> @@ -135,18 +126,14 @@ ProjectFile="$(MSBuildProjectFullPath)" IntermediateOutputPath="$(IntermediateOutputPath)" Language="$(Language)" - CompileFiles ="@(Compile)"> + CompileFiles="@(Compile)"> - - - - - - + + <_GeneratedCodeFiles Include="$(AssemblyInfoTempFilePath)" /> diff --git a/src/GitVersion.MsBuild/nuget-files.props b/src/GitVersion.MsBuild/nuget-files.props deleted file mode 100644 index 65516b5e63..0000000000 --- a/src/GitVersion.MsBuild/nuget-files.props +++ /dev/null @@ -1,28 +0,0 @@ - - - - ../GitVersion.App/bin/$(Configuration)/net48 - ../GitVersion.App/bin/$(Configuration)/netcoreapp3.1/publish - ../GitVersion.App/bin/$(Configuration)/net5.0/publish - ../GitVersion.App/bin/$(Configuration)/net6.0/publish - tools/net48 - tools/netcoreapp3.1 - tools/net5.0 - tools/net6.0 - - - - - - - - - - - - - - - - - diff --git a/src/GitVersion.Output.Tests/AssemblyParallelizable.cs b/src/GitVersion.Output.Tests/AssemblyParallelizable.cs new file mode 100644 index 0000000000..fdd365b7e2 --- /dev/null +++ b/src/GitVersion.Output.Tests/AssemblyParallelizable.cs @@ -0,0 +1 @@ +[assembly: Parallelizable(ParallelScope.Fixtures)] diff --git a/src/GitVersion.Output.Tests/GitVersion.Output.Tests.csproj b/src/GitVersion.Output.Tests/GitVersion.Output.Tests.csproj new file mode 100644 index 0000000000..d54414c314 --- /dev/null +++ b/src/GitVersion.Output.Tests/GitVersion.Output.Tests.csproj @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/WixFileTests.UpdateWixVersionFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/WixFileTests.UpdateWixVersionFile.approved.txt similarity index 77% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/WixFileTests.UpdateWixVersionFile.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/WixFileTests.UpdateWixVersionFile.approved.txt index aac25ac588..d935478f68 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/Approved/WixFileTests.UpdateWixVersionFile.approved.txt +++ b/src/GitVersion.Output.Tests/Output/Approved/WixFileTests.UpdateWixVersionFile.approved.txt @@ -4,23 +4,15 @@ - - - - - - - - diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/WixFileTests.UpdateWixVersionFileWhenFileAlreadyExists.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/WixFileTests.UpdateWixVersionFileWhenFileAlreadyExists.approved.txt similarity index 77% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/WixFileTests.UpdateWixVersionFileWhenFileAlreadyExists.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/WixFileTests.UpdateWixVersionFileWhenFileAlreadyExists.approved.txt index aac25ac588..d935478f68 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/Approved/WixFileTests.UpdateWixVersionFileWhenFileAlreadyExists.approved.txt +++ b/src/GitVersion.Output.Tests/Output/Approved/WixFileTests.UpdateWixVersionFileWhenFileAlreadyExists.approved.txt @@ -4,23 +4,15 @@ - - - - - - - - diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/cs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt diff --git a/src/GitVersion.Output.Tests/Output/Approved/cs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/cs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt new file mode 100644 index 0000000000..9c6b2b9a43 --- /dev/null +++ b/src/GitVersion.Output.Tests/Output/Approved/cs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt @@ -0,0 +1,56 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// GitVersion +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +#if NET20 || NET35 || NETCOREAPP1_0 || NETCOREAPP1_1 || NETSTANDARD1_0 || NETSTANDARD1_1 || NETSTANDARD1_2 || NETSTANDARD1_3 || NETSTANDARD1_4 || NETSTANDARD1_5 || NETSTANDARD1_6 +namespace System.Diagnostics.CodeAnalysis +{ + [global::System.AttributeUsage( + global::System.AttributeTargets.Assembly | + global::System.AttributeTargets.Class | + global::System.AttributeTargets.Struct | + global::System.AttributeTargets.Constructor | + global::System.AttributeTargets.Method | + global::System.AttributeTargets.Property | + global::System.AttributeTargets.Event, + Inherited = false, AllowMultiple = false)] + internal sealed class ExcludeFromCodeCoverageAttribute : global::System.Attribute { } +} +#endif + +[global::System.Runtime.CompilerServices.CompilerGenerated] +[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] +static class GitVersionInformation +{ + public const string AssemblySemFileVer = "1.2.3.0"; + public const string AssemblySemVer = "1.2.3.0"; + public const string BranchName = "feature1"; + public const string BuildMetaData = "5"; + public const string CommitDate = "2014-03-06"; + public const string CommitsSinceVersionSource = "5"; + public const string EscapedBranchName = "feature1"; + public const string FullBuildMetaData = "5.Branch.feature1.Sha.commitSha"; + public const string FullSemVer = "1.2.3-unstable.4+5"; + public const string InformationalVersion = "1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha"; + public const string Major = "1"; + public const string MajorMinorPatch = "1.2.3"; + public const string Minor = "2"; + public const string Patch = "3"; + public const string PreReleaseLabel = "unstable"; + public const string PreReleaseLabelWithDash = "-unstable"; + public const string PreReleaseNumber = "4"; + public const string PreReleaseTag = "unstable.4"; + public const string PreReleaseTagWithDash = "-unstable.4"; + public const string SemVer = "1.2.3-unstable.4"; + public const string Sha = "commitSha"; + public const string ShortSha = "commitShortSha"; + public const string UncommittedChanges = "0"; + public const string VersionSourceSha = "versionSourceSha"; + public const string WeightedPreReleaseNumber = "4"; +} diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/fs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt similarity index 85% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/fs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/fs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt index b8aa9a35bb..52f2f04d87 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/Approved/fs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt +++ b/src/GitVersion.Output.Tests/Output/Approved/fs/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt @@ -30,36 +30,28 @@ namespace global [] [] type GitVersionInformation = + static member AssemblySemFileVer = "1.2.3.0" + static member AssemblySemVer = "1.2.3.0" + static member BranchName = "feature1" + static member BuildMetaData = "5" + static member CommitDate = "2014-03-06" + static member CommitsSinceVersionSource = "5" + static member EscapedBranchName = "feature1" + static member FullBuildMetaData = "5.Branch.feature1.Sha.commitSha" + static member FullSemVer = "1.2.3-unstable.4+5" + static member InformationalVersion = "1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha" static member Major = "1" + static member MajorMinorPatch = "1.2.3" static member Minor = "2" static member Patch = "3" - static member PreReleaseTag = "unstable.4" - static member PreReleaseTagWithDash = "-unstable.4" static member PreReleaseLabel = "unstable" static member PreReleaseLabelWithDash = "-unstable" static member PreReleaseNumber = "4" - static member WeightedPreReleaseNumber = "4" - static member BuildMetaData = "5" - static member BuildMetaDataPadded = "0005" - static member FullBuildMetaData = "5.Branch.feature1.Sha.commitSha" - static member MajorMinorPatch = "1.2.3" + static member PreReleaseTag = "unstable.4" + static member PreReleaseTagWithDash = "-unstable.4" static member SemVer = "1.2.3-unstable.4" - static member LegacySemVer = "1.2.3-unstable4" - static member LegacySemVerPadded = "1.2.3-unstable0004" - static member AssemblySemVer = "1.2.3.0" - static member AssemblySemFileVer = "1.2.3.0" - static member FullSemVer = "1.2.3-unstable.4+5" - static member InformationalVersion = "1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha" - static member BranchName = "feature1" - static member EscapedBranchName = "feature1" static member Sha = "commitSha" static member ShortSha = "commitShortSha" - static member NuGetVersionV2 = "1.2.3-unstable0004" - static member NuGetVersion = "1.2.3-unstable0004" - static member NuGetPreReleaseTagV2 = "unstable0004" - static member NuGetPreReleaseTag = "unstable0004" - static member VersionSourceSha = "versionSourceSha" - static member CommitsSinceVersionSource = "5" - static member CommitsSinceVersionSourcePadded = "0005" static member UncommittedChanges = "0" - static member CommitDate = "2014-03-06" + static member VersionSourceSha = "versionSourceSha" + static member WeightedPreReleaseNumber = "4" diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt similarity index 100% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/AssemblyInfoFileUpdaterTests.ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone.approved.txt diff --git a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt b/src/GitVersion.Output.Tests/Output/Approved/vb/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt similarity index 84% rename from src/GitVersion.Core.Tests/VersionConverters/Approved/vb/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt rename to src/GitVersion.Output.Tests/Output/Approved/vb/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt index 39760d6b8e..200b58a1e2 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/Approved/vb/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt +++ b/src/GitVersion.Output.Tests/Output/Approved/vb/GitVersionInfoGeneratorTests.ShouldCreateFile.approved.txt @@ -31,39 +31,31 @@ Namespace Global NotInheritable Class GitVersionInformation Private Sub New() End Sub + Public Shared AssemblySemFileVer As String = "1.2.3.0" + Public Shared AssemblySemVer As String = "1.2.3.0" + Public Shared BranchName As String = "feature1" + Public Shared BuildMetaData As String = "5" + Public Shared CommitDate As String = "2014-03-06" + Public Shared CommitsSinceVersionSource As String = "5" + Public Shared EscapedBranchName As String = "feature1" + Public Shared FullBuildMetaData As String = "5.Branch.feature1.Sha.commitSha" + Public Shared FullSemVer As String = "1.2.3-unstable.4+5" + Public Shared InformationalVersion As String = "1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha" Public Shared Major As String = "1" + Public Shared MajorMinorPatch As String = "1.2.3" Public Shared Minor As String = "2" Public Shared Patch As String = "3" - Public Shared PreReleaseTag As String = "unstable.4" - Public Shared PreReleaseTagWithDash As String = "-unstable.4" Public Shared PreReleaseLabel As String = "unstable" Public Shared PreReleaseLabelWithDash As String = "-unstable" Public Shared PreReleaseNumber As String = "4" - Public Shared WeightedPreReleaseNumber As String = "4" - Public Shared BuildMetaData As String = "5" - Public Shared BuildMetaDataPadded As String = "0005" - Public Shared FullBuildMetaData As String = "5.Branch.feature1.Sha.commitSha" - Public Shared MajorMinorPatch As String = "1.2.3" + Public Shared PreReleaseTag As String = "unstable.4" + Public Shared PreReleaseTagWithDash As String = "-unstable.4" Public Shared SemVer As String = "1.2.3-unstable.4" - Public Shared LegacySemVer As String = "1.2.3-unstable4" - Public Shared LegacySemVerPadded As String = "1.2.3-unstable0004" - Public Shared AssemblySemVer As String = "1.2.3.0" - Public Shared AssemblySemFileVer As String = "1.2.3.0" - Public Shared FullSemVer As String = "1.2.3-unstable.4+5" - Public Shared InformationalVersion As String = "1.2.3-unstable.4+5.Branch.feature1.Sha.commitSha" - Public Shared BranchName As String = "feature1" - Public Shared EscapedBranchName As String = "feature1" Public Shared Sha As String = "commitSha" Public Shared ShortSha As String = "commitShortSha" - Public Shared NuGetVersionV2 As String = "1.2.3-unstable0004" - Public Shared NuGetVersion As String = "1.2.3-unstable0004" - Public Shared NuGetPreReleaseTagV2 As String = "unstable0004" - Public Shared NuGetPreReleaseTag As String = "unstable0004" - Public Shared VersionSourceSha As String = "versionSourceSha" - Public Shared CommitsSinceVersionSource As String = "5" - Public Shared CommitsSinceVersionSourcePadded As String = "0005" Public Shared UncommittedChanges As String = "0" - Public Shared CommitDate As String = "2014-03-06" + Public Shared VersionSourceSha As String = "versionSourceSha" + Public Shared WeightedPreReleaseNumber As String = "4" End Class End Namespace diff --git a/src/GitVersion.Core.Tests/VersionConverters/AssemblyFileVersionTests.cs b/src/GitVersion.Output.Tests/Output/AssemblyFileVersionTests.cs similarity index 86% rename from src/GitVersion.Core.Tests/VersionConverters/AssemblyFileVersionTests.cs rename to src/GitVersion.Output.Tests/Output/AssemblyFileVersionTests.cs index a7e343cefe..d6f50b26ee 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/AssemblyFileVersionTests.cs +++ b/src/GitVersion.Output.Tests/Output/AssemblyFileVersionTests.cs @@ -1,7 +1,6 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Extensions; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -14,11 +13,11 @@ public class AssemblyFileVersionTests : TestBase [TestCase(AssemblyFileVersioningScheme.MajorMinorPatch, 1, 2, 3, 4, "1.2.3.0")] [TestCase(AssemblyFileVersioningScheme.MajorMinorPatchTag, 1, 2, 3, 4, "1.2.3.4")] public void ValidateAssemblyFileVersionBuilder(AssemblyFileVersioningScheme assemblyFileVersioningScheme, int major, int minor, int patch, - int tag, string versionString) + int tag, string? versionString) { var semVer = new SemanticVersion(major, minor, patch) { - PreReleaseTag = new SemanticVersionPreReleaseTag("Test", tag) + PreReleaseTag = new("Test", tag, true) }; var assemblyFileVersion = semVer.GetAssemblyFileVersion(assemblyFileVersioningScheme); diff --git a/src/GitVersion.Core.Tests/VersionConverters/AssemblyInfoFileUpdaterTests.cs b/src/GitVersion.Output.Tests/Output/AssemblyInfoFileUpdaterTests.cs similarity index 80% rename from src/GitVersion.Core.Tests/VersionConverters/AssemblyInfoFileUpdaterTests.cs rename to src/GitVersion.Output.Tests/Output/AssemblyInfoFileUpdaterTests.cs index 4fe8af3182..7082e33020 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/AssemblyInfoFileUpdaterTests.cs +++ b/src/GitVersion.Output.Tests/Output/AssemblyInfoFileUpdaterTests.cs @@ -1,15 +1,11 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model.Configuration; +using GitVersion.Output.AssemblyInfo; using GitVersion.OutputVariables; using GitVersion.VersionCalculation; -using GitVersion.VersionConverters.AssemblyInfo; using Microsoft.Extensions.DependencyInjection; -using NSubstitute; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -20,6 +16,13 @@ public class AssemblyInfoFileUpdaterTests : TestBase private IVariableProvider variableProvider; private ILog log; private IFileSystem fileSystem; + private string workingDir; + + [OneTimeSetUp] + public void OneTimeSetUp() => workingDir = PathHelper.Combine(PathHelper.GetTempPath(), "AssemblyInfoFileUpdaterTests"); + + [OneTimeTearDown] + public void OneTimeTearDown() => DirectoryHelper.DeleteDirectory(workingDir); [SetUp] public void Setup() @@ -36,17 +39,16 @@ public void Setup() [TestCase("cs")] [TestCase("fs")] [TestCase("vb")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo(string fileExtension) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "VersionAssemblyInfo." + fileExtension; var fullPath = PathHelper.Combine(workingDir, assemblyInfoFile); - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + + var variables = this.variableProvider.GetVariablesFor( + SemanticVersion.Parse("1.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0); using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, this.fileSystem); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, true, assemblyInfoFile)); this.fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); } @@ -54,17 +56,16 @@ public void ShouldCreateAssemblyInfoFileWhenNotExistsAndEnsureAssemblyInfo(strin [TestCase("cs")] [TestCase("fs")] [TestCase("vb")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo(string fileExtension) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = PathHelper.Combine("src", "Project", "Properties", $"VersionAssemblyInfo.{fileExtension}"); var fullPath = PathHelper.Combine(workingDir, assemblyInfoFile); - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor( + SemanticVersion.Parse("1.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0 + ); using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, this.fileSystem); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, true, assemblyInfoFile)); this.fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); } @@ -72,20 +73,13 @@ public void ShouldCreateAssemblyInfoFileAtPathWhenNotExistsAndEnsureAssemblyInfo [TestCase("cs")] [TestCase("fs")] [TestCase("vb")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInfo(string fileExtension) { - var workingDir = Path.GetTempPath(); - var assemblyInfoFiles = new HashSet - { - "AssemblyInfo." + fileExtension, - PathHelper.Combine("src", "Project", "Properties", "VersionAssemblyInfo." + fileExtension) - }; - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var assemblyInfoFiles = new HashSet { "AssemblyInfo." + fileExtension, PathHelper.Combine("src", "Project", "Properties", "VersionAssemblyInfo." + fileExtension) }; + var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0); using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, this.fileSystem); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFiles.ToArray())); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, true, [.. assemblyInfoFiles])); foreach (var item in assemblyInfoFiles) { @@ -99,13 +93,14 @@ public void ShouldCreateAssemblyInfoFilesAtPathWhenNotExistsAndEnsureAssemblyInf [TestCase("vb")] public void ShouldNotCreateAssemblyInfoFileWhenNotExistsAndNotEnsureAssemblyInfo(string fileExtension) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "VersionAssemblyInfo." + fileExtension; var fullPath = PathHelper.Combine(workingDir, assemblyInfoFile); - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor( + SemanticVersion.Parse("1.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0 + ); using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, this.fileSystem); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); this.fileSystem.Exists(fullPath).ShouldBeFalse(); } @@ -114,13 +109,15 @@ public void ShouldNotCreateAssemblyInfoFileWhenNotExistsAndNotEnsureAssemblyInfo public void ShouldNotCreateAssemblyInfoFileForUnknownSourceCodeAndEnsureAssemblyInfo() { this.fileSystem = Substitute.For(); - var workingDir = Path.GetTempPath(); + const string assemblyInfoFile = "VersionAssemblyInfo.js"; var fullPath = PathHelper.Combine(workingDir, assemblyInfoFile); - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor( + SemanticVersion.Parse("1.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0 + ); using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, this.fileSystem); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, true, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, true, assemblyInfoFile)); this.fileSystem.Received(0).WriteAllText(fullPath, Arg.Any()); } @@ -129,12 +126,14 @@ public void ShouldNotCreateAssemblyInfoFileForUnknownSourceCodeAndEnsureAssembly public void ShouldStartSearchFromWorkingDirectory() { this.fileSystem = Substitute.For(); - var workingDir = Path.GetTempPath(); - var assemblyInfoFiles = Array.Empty(); - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("1.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + + string[] assemblyInfoFiles = []; + var variables = this.variableProvider.GetVariablesFor( + SemanticVersion.Parse("1.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0 + ); using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, this.fileSystem); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFiles.ToArray())); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, [.. assemblyInfoFiles])); this.fileSystem.Received().DirectoryEnumerateFiles(Arg.Is(workingDir), Arg.Any(), Arg.Any()); } @@ -144,14 +143,13 @@ public void ShouldStartSearchFromWorkingDirectory() [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersion(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -163,18 +161,15 @@ public void ShouldReplaceAssemblyVersion(string fileExtension, string assemblyFi [TestCase("cs", "[assembly: AssemblyFileVersion(\"1.0.0.0\")]")] [TestCase("fs", "[]")] [TestCase("vb", "")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.None, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); assemblyFileContent = fs.ReadAllText(fileName); assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); @@ -186,14 +181,13 @@ public void ShouldNotReplaceAssemblyVersionWhenVersionSchemeIsNone(string fileEx [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionInRelativePath(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = PathHelper.Combine("Project", "src", "Properties", "AssemblyInfo." + fileExtension); var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -207,14 +201,13 @@ public void ShouldReplaceAssemblyVersionInRelativePath(string fileExtension, str [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionInRelativePathWithWhiteSpace(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = PathHelper.Combine("Project", "src", "Properties", "AssemblyInfo." + fileExtension); var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -228,14 +221,13 @@ public void ShouldReplaceAssemblyVersionInRelativePathWithWhiteSpace(string file [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionWithStar(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -249,14 +241,13 @@ public void ShouldReplaceAssemblyVersionWithStar(string fileExtension, string as [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionWithAttributeSuffix(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => !s.Contains(@"AssemblyVersionAttribute(""1.0.0.0"")") && @@ -273,14 +264,13 @@ public void ShouldReplaceAssemblyVersionWithAttributeSuffix(string fileExtension [TestCase("vb")] public void ShouldAddAssemblyVersionIfMissingFromInfoFile(string fileExtension) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile("", fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -294,14 +284,13 @@ public void ShouldAddAssemblyVersionIfMissingFromInfoFile(string fileExtension) [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAlreadySubstitutedValues(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -315,14 +304,13 @@ public void ShouldReplaceAlreadySubstitutedValues(string fileExtension, string a [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionWhenCreatingAssemblyVersionFileAndEnsureAssemblyInfo(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.1.0"")") && @@ -336,14 +324,13 @@ public void ShouldReplaceAssemblyVersionWhenCreatingAssemblyVersionFileAndEnsure [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionInRelativePathWithVariables(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = PathHelper.Combine("Project", "src", "Properties", "AssemblyInfo." + fileExtension); var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -357,14 +344,13 @@ public void ShouldReplaceAssemblyVersionInRelativePathWithVariables(string fileE [TestCase("vb", "\r\n\r\n")] public void ShouldReplaceAssemblyVersionInRelativePathWithVariablesAndWhiteSpace(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = PathHelper.Combine("Project", "src", "Properties", "AssemblyInfo." + fileExtension); var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.MajorMinor, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); fs.Received().WriteAllText(fileName, Arg.Is(s => s.Contains(@"AssemblyVersion(""2.3.0.0"")") && @@ -376,18 +362,15 @@ public void ShouldReplaceAssemblyVersionInRelativePathWithVariablesAndWhiteSpace [TestCase("cs", "[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]")] [TestCase("fs", "[]\r\n[]")] [TestCase("vb", "\r\n")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); assemblyFileContent = fs.ReadAllText(fileName); assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); @@ -397,18 +380,15 @@ public void ShouldAddAssemblyInformationalVersionWhenUpdatingAssemblyVersionFile [TestCase("cs", "[assembly: AssemblyVersion(\"1.0.0.0\")]\r\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\r\n// comment\r\n")] [TestCase("fs", "[]\r\n[]\r\ndo\r\n()\r\n")] [TestCase("vb", "\r\n\r\n' comment\r\n")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttributes(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, verify: (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); assemblyFileContent = fs.ReadAllText(fileName); assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); @@ -418,18 +398,15 @@ public void Issue1183ShouldAddFSharpAssemblyInformationalVersionBesideOtherAttri [TestCase("cs", "[assembly: AssemblyFileVersion(\"1.0.0.0\")]")] [TestCase("fs", "[]")] [TestCase("vb", "")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldNotAddAssemblyInformationalVersionWhenVersionSchemeIsNone(string fileExtension, string assemblyFileContent) { - var workingDir = Path.GetTempPath(); var assemblyInfoFile = "AssemblyInfo." + fileExtension; var fileName = PathHelper.Combine(workingDir, assemblyInfoFile); VerifyAssemblyInfoFile(assemblyFileContent, fileName, AssemblyVersioningScheme.None, (fs, variables) => { using var assemblyInfoFileUpdater = new AssemblyInfoFileUpdater(this.log, fs); - assemblyInfoFileUpdater.Execute(variables, new AssemblyInfoContext(workingDir, false, assemblyInfoFile)); + assemblyInfoFileUpdater.Execute(variables, new(workingDir, false, assemblyInfoFile)); assemblyFileContent = fs.ReadAllText(fileName); assemblyFileContent.ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); @@ -440,16 +417,10 @@ private void VerifyAssemblyInfoFile( string assemblyFileContent, string fileName, AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch, - Action? verify = null) + Action? verify = null) { this.fileSystem = Substitute.For(); - var version = new SemanticVersion - { - BuildMetaData = new SemanticVersionBuildMetaData("versionSourceHash", 3, "foo", "hash", "shortHash", DateTimeOffset.Now, 0), - Major = 2, - Minor = 3, - Patch = 1 - }; + var version = new SemanticVersion { BuildMetaData = new("versionSourceHash", 3, "foo", "hash", "shortHash", DateTimeOffset.Now, 0), Major = 2, Minor = 3, Patch = 1 }; this.fileSystem.Exists(fileName).Returns(true); this.fileSystem.ReadAllText(fileName).Returns(assemblyFileContent); @@ -459,8 +430,8 @@ private void VerifyAssemblyInfoFile( this.fileSystem.ReadAllText(fileName).Returns(assemblyFileContent); }); - var config = new TestEffectiveConfiguration(versioningScheme); - var variables = this.variableProvider.GetVariablesFor(version, config, false); + var configuration = EmptyConfigurationBuilder.New.WithAssemblyVersioningScheme(versioningScheme).Build(); + var variables = this.variableProvider.GetVariablesFor(version, configuration, 0); verify?.Invoke(this.fileSystem, variables); } diff --git a/src/GitVersion.Output.Tests/Output/FormatArgumentTests.cs b/src/GitVersion.Output.Tests/Output/FormatArgumentTests.cs new file mode 100644 index 0000000000..d116855c6f --- /dev/null +++ b/src/GitVersion.Output.Tests/Output/FormatArgumentTests.cs @@ -0,0 +1,83 @@ +using GitVersion.Core.Tests.Helpers; +using GitVersion.Logging; +using GitVersion.Output.OutputGenerator; +using LibGit2Sharp; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; + +namespace GitVersion.Core.Tests; + +[TestFixture] +public class FormatArgumentTests : TestBase +{ + [TestCase("{SemVer}", "1.1.0-foo.1")] + [TestCase("{Major}.{Minor}", "1.1")] + [TestCase("{Major}.{Minor}.{Patch}", "1.1.0")] + [TestCase("{Major}.{Minor}.{Patch}.{PreReleaseTag}", "1.1.0.foo.1")] + public void ShouldOutputFormatTests(string format, string expectedValue) + { + var fixture = CreateTestRepository(); + + var consoleBuilder = new StringBuilder(); + IConsole consoleAdapter = new TestConsoleAdapter(consoleBuilder); + + var sp = ConfigureServices(services => + { + var options = Options.Create(new GitVersionOptions { WorkingDirectory = fixture.RepositoryPath, RepositoryInfo = { TargetBranch = fixture.Repository.Head.CanonicalName }, Format = format, Output = { OutputType.Json } }); + var repository = fixture.Repository.ToGitRepository(); + + services.AddSingleton(options); + services.AddSingleton(repository); + services.AddSingleton(consoleAdapter); + }); + + var versionVariables = sp.GetRequiredService().CalculateVersionVariables(); + var outputGenerator = sp.GetRequiredService(); + + outputGenerator.Execute(versionVariables, new()); + var output = consoleBuilder.ToString().Replace("\n", "").Replace("\r", ""); + output.ShouldBeEquivalentTo(expectedValue); + } + + [TestCase("{Major}.{Minor}.{env:CustomVar}", "1.1.foo")] + [TestCase("{Major}.{Minor}.{Patch}.{env:CustomVar}", "1.1.0.foo")] + public void ShouldOutputFormatWithEnvironmentVariablesTests(string format, string expectedValue) + { + var fixture = CreateTestRepository(); + var consoleBuilder = new StringBuilder(); + IConsole console = new TestConsoleAdapter(consoleBuilder); + IEnvironment environment = new TestEnvironment(); + environment.SetEnvironmentVariable("CustomVar", "foo"); + + var sp = ConfigureServices(services => + { + var options = Options.Create(new GitVersionOptions { WorkingDirectory = fixture.RepositoryPath, RepositoryInfo = { TargetBranch = fixture.Repository.Head.CanonicalName }, Format = format, Output = { OutputType.Json } }); + var repository = fixture.Repository.ToGitRepository(); + + services.AddSingleton(options); + services.AddSingleton(repository); + services.AddSingleton(console); + services.AddSingleton(environment); + }); + + var versionVariables = sp.GetRequiredService().CalculateVersionVariables(); + var outputGenerator = sp.GetRequiredService(); + + outputGenerator.Execute(versionVariables, new()); + var output = consoleBuilder.ToString().Replace("\n", "").Replace("\r", ""); + output.ShouldBeEquivalentTo(expectedValue); + } + + private static EmptyRepositoryFixture CreateTestRepository() + { + var fixture = new EmptyRepositoryFixture(); + _ = fixture.Repository.MakeACommit(); + Commands.Checkout(fixture.Repository, fixture.Repository.CreateBranch("develop")); + var secondCommit = fixture.Repository.MakeACommit(); + _ = fixture.Repository.Tags.Add("1.0.0", secondCommit); + var featureBranch = fixture.Repository.CreateBranch("feature/foo"); + Commands.Checkout(fixture.Repository, featureBranch); + _ = fixture.Repository.MakeACommit(); + return fixture; + } +} diff --git a/src/GitVersion.Core.Tests/VersionConverters/GitVersionInfoGeneratorTests.cs b/src/GitVersion.Output.Tests/Output/GitVersionInfoGeneratorTests.cs similarity index 72% rename from src/GitVersion.Core.Tests/VersionConverters/GitVersionInfoGeneratorTests.cs rename to src/GitVersion.Output.Tests/Output/GitVersionInfoGeneratorTests.cs index 7237646c87..e4b8964326 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/GitVersionInfoGeneratorTests.cs +++ b/src/GitVersion.Output.Tests/Output/GitVersionInfoGeneratorTests.cs @@ -1,10 +1,9 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; +using GitVersion.Output.GitVersionInfo; using GitVersion.VersionCalculation; -using GitVersion.VersionConverters.GitVersionInfo; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -18,11 +17,11 @@ public class GitVersionInfoGeneratorTests : TestBase [TestCase("cs")] [TestCase("fs")] [TestCase("vb")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void ShouldCreateFile(string fileExtension) { - var directory = Path.GetTempPath(); + var directory = PathHelper.Combine(PathHelper.GetTempPath(), "GitVersionInfoGeneratorTests", Guid.NewGuid().ToString()); + if (!Directory.Exists(directory)) + Directory.CreateDirectory(directory); var fileName = "GitVersionInformation.g." + fileExtension; var fullPath = PathHelper.Combine(directory, fileName); @@ -32,7 +31,7 @@ public void ShouldCreateFile(string fileExtension) Minor = 2, Patch = 3, PreReleaseTag = "unstable4", - BuildMetaData = new SemanticVersionBuildMetaData("versionSourceSha", 5, + BuildMetaData = new("versionSourceSha", 5, "feature1", "commitSha", "commitShortSha", DateTimeOffset.Parse("2014-03-06 23:59:59Z"), 0) }; @@ -41,11 +40,13 @@ public void ShouldCreateFile(string fileExtension) var fileSystem = sp.GetRequiredService(); var variableProvider = sp.GetRequiredService(); - var variables = variableProvider.GetVariablesFor(semanticVersion, new TestEffectiveConfiguration(), false); + var variables = variableProvider.GetVariablesFor(semanticVersion, EmptyConfigurationBuilder.New.Build(), 0); using var generator = sp.GetRequiredService(); - generator.Execute(variables, new GitVersionInfoContext(directory, fileName, fileExtension)); + generator.Execute(variables, new(directory, fileName, fileExtension)); fileSystem.ReadAllText(fullPath).ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved", fileExtension))); + + DirectoryHelper.DeleteDirectory(directory); } } diff --git a/src/GitVersion.Core.Tests/VersionConverters/InformationalVersionBuilderTests.cs b/src/GitVersion.Output.Tests/Output/InformationalVersionBuilderTests.cs similarity index 90% rename from src/GitVersion.Core.Tests/VersionConverters/InformationalVersionBuilderTests.cs rename to src/GitVersion.Output.Tests/Output/InformationalVersionBuilderTests.cs index 93e0b95df2..b9e1bb6a24 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/InformationalVersionBuilderTests.cs +++ b/src/GitVersion.Output.Tests/Output/InformationalVersionBuilderTests.cs @@ -1,5 +1,4 @@ using GitVersion.Core.Tests.Helpers; -using NUnit.Framework; namespace GitVersion.Core.Tests; @@ -20,7 +19,7 @@ public class InformationalVersionBuilderTests : TestBase [TestCase("release/1.2", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 0, "beta2", null, null, "1.2.0-beta.2+Branch.release-1.2.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] [TestCase("release/1.2", "a682956dc1a2752aa24597a0f5cd939f93614509", "a682956d", 1, 2, 0, "alpha2", null, null, "1.2.0-alpha.2+Branch.release-1.2.Sha.a682956dc1a2752aa24597a0f5cd939f93614509")] public void ValidateInformationalVersionBuilder(string branchName, string sha, string shortSha, int major, int minor, int patch, - string tag, string versionSourceSha, int? commitsSinceTag, string versionString) + string? tag, string? versionSourceSha, int? commitsSinceTag, string versionString) { var semanticVersion = new SemanticVersion { @@ -28,11 +27,10 @@ public void ValidateInformationalVersionBuilder(string branchName, string sha, s Minor = minor, Patch = patch, PreReleaseTag = tag, - BuildMetaData = new SemanticVersionBuildMetaData(versionSourceSha, commitsSinceTag, branchName, sha, shortSha, DateTimeOffset.MinValue, 0) + BuildMetaData = new(versionSourceSha, commitsSinceTag, branchName, sha, shortSha, DateTimeOffset.MinValue, 0) }; var informationalVersion = semanticVersion.ToString("i"); - Assert.AreEqual(versionString, informationalVersion); + Assert.That(informationalVersion, Is.EqualTo(versionString)); } - } diff --git a/src/GitVersion.Core.Tests/VersionConverters/ProjectFileUpdaterTests.cs b/src/GitVersion.Output.Tests/Output/ProjectFileUpdaterTests.cs similarity index 73% rename from src/GitVersion.Core.Tests/VersionConverters/ProjectFileUpdaterTests.cs rename to src/GitVersion.Output.Tests/Output/ProjectFileUpdaterTests.cs index 39437b5365..90f92f91c4 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/ProjectFileUpdaterTests.cs +++ b/src/GitVersion.Output.Tests/Output/ProjectFileUpdaterTests.cs @@ -1,16 +1,12 @@ using System.Xml.Linq; +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; -using GitVersion.Extensions; using GitVersion.Helpers; using GitVersion.Logging; -using GitVersion.Model.Configuration; +using GitVersion.Output.AssemblyInfo; using GitVersion.OutputVariables; using GitVersion.VersionCalculation; -using GitVersion.VersionConverters.AssemblyInfo; using Microsoft.Extensions.DependencyInjection; -using NSubstitute; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -30,7 +26,7 @@ public void Setup() ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); var sp = ConfigureServices(); - this.logMessages = new List(); + this.logMessages = []; this.log = new Log(new TestLogAppender(this.logMessages.Add)); this.fileSystem = sp.GetRequiredService(); @@ -38,8 +34,9 @@ public void Setup() this.projectFileUpdater = new ProjectFileUpdater(this.log, this.fileSystem); } - [Category(NoMono)] - [Description(NoMonoDescription)] + [TearDown] + public void Teardown() => this.projectFileUpdater.Dispose(); + [TestCase("Microsoft.NET.Sdk")] [TestCase("Microsoft.NET.Sdk.Worker")] [TestCase("Microsoft.NET.Sdk.Web")] @@ -52,7 +49,7 @@ public void CanUpdateProjectFileWithSdkProjectFileXml(string sdk) Exe - netcoreapp3.1 + net6.0 "; @@ -66,12 +63,10 @@ public void CanUpdateProjectFileWithSdkProjectFileXml(string sdk) Exe - netcoreapp3.1 + net6.0 ")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CannotUpdateProjectFileWithIncorrectProjectSdk(string xml) { var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); @@ -80,19 +75,17 @@ public void CannotUpdateProjectFileWithIncorrectProjectSdk(string xml) logMessages.ShouldNotBeEmpty(); logMessages.Count.ShouldBe(1); - logMessages.First().ShouldContain("Specified project file Sdk (SomeOtherProject.Sdk) is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); + logMessages[0].ShouldContain("Specified project file Sdk (SomeOtherProject.Sdk) is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); } [TestCase(@" Exe - netcoreapp3.1 + net6.0 ")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CannotUpdateProjectFileWithMissingProjectSdk(string xml) { var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); @@ -101,20 +94,18 @@ public void CannotUpdateProjectFileWithMissingProjectSdk(string xml) logMessages.ShouldNotBeEmpty(); logMessages.Count.ShouldBe(1); - logMessages.First().ShouldContain("Specified project file Sdk () is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); + logMessages[0].ShouldContain("Specified project file Sdk () is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); } [TestCase(@" Exe - netcoreapp3.1 + net6.0 false ")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CannotUpdateProjectFileWithoutAssemblyInfoGeneration(string xml) { var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); @@ -123,15 +114,13 @@ public void CannotUpdateProjectFileWithoutAssemblyInfoGeneration(string xml) logMessages.ShouldNotBeEmpty(); logMessages.Count.ShouldBe(1); - logMessages.First().ShouldContain("Project file specifies false: versions set in this project file will not affect the output artifacts"); + logMessages[0].ShouldContain("Project file specifies false: versions set in this project file will not affect the output artifacts"); } [TestCase(@" ")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void CannotUpdateProjectFileWithoutAPropertyGroup(string xml) { var canUpdate = projectFileUpdater.CanUpdateProjectFile(XElement.Parse(xml)); @@ -140,22 +129,22 @@ public void CannotUpdateProjectFileWithoutAPropertyGroup(string xml) logMessages.ShouldNotBeEmpty(); logMessages.Count.ShouldBe(1); - logMessages.First().ShouldContain("Unable to locate any elements in specified project file. Are you sure it is in a correct format?"); + logMessages[0].ShouldContain("Unable to locate any elements in specified project file. Are you sure it is in a correct format?"); } [TestCase(@" Exe - netcoreapp3.1 + net6.0 " )] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateProjectXmlVersionElementWithStandardXmlInsertsElement(string xml) { - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor( + SemanticVersion.Parse("2.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0 + ); var xmlRoot = XElement.Parse(xml); variables.AssemblySemVer.ShouldNotBeNull(); ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); @@ -164,7 +153,7 @@ public void UpdateProjectXmlVersionElementWithStandardXmlInsertsElement(string x Exe - netcoreapp3.1 + net6.0 2.0.0.0 "); @@ -175,16 +164,14 @@ public void UpdateProjectXmlVersionElementWithStandardXmlInsertsElement(string x Exe - netcoreapp3.1 + net6.0 1.0.0.0 " )] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateProjectXmlVersionElementWithStandardXmlModifiesElement(string xml) { - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0); var xmlRoot = XElement.Parse(xml); variables.AssemblySemVer.ShouldNotBeNull(); ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); @@ -193,7 +180,7 @@ public void UpdateProjectXmlVersionElementWithStandardXmlModifiesElement(string Exe - netcoreapp3.1 + net6.0 2.0.0.0 "); @@ -204,7 +191,7 @@ public void UpdateProjectXmlVersionElementWithStandardXmlModifiesElement(string Exe - netcoreapp3.1 + net6.0 1.0.0.0 @@ -212,11 +199,9 @@ public void UpdateProjectXmlVersionElementWithStandardXmlModifiesElement(string " )] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateProjectXmlVersionElementWithDuplicatePropertyGroupsModifiesLastElement(string xml) { - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0); var xmlRoot = XElement.Parse(xml); variables.AssemblySemVer.ShouldNotBeNull(); ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); @@ -225,7 +210,7 @@ public void UpdateProjectXmlVersionElementWithDuplicatePropertyGroupsModifiesLas Exe - netcoreapp3.1 + net6.0 1.0.0.0 @@ -239,17 +224,15 @@ public void UpdateProjectXmlVersionElementWithDuplicatePropertyGroupsModifiesLas Exe - netcoreapp3.1 + net6.0 1.0.0.0 1.0.0.0 " )] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateProjectXmlVersionElementWithMultipleVersionElementsLastOneIsModified(string xml) { - var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", Config.DefaultTagPrefix), new TestEffectiveConfiguration(), false); + var variables = this.variableProvider.GetVariablesFor(SemanticVersion.Parse("2.0.0", ConfigurationConstants.DefaultTagPrefix), EmptyConfigurationBuilder.New.Build(), 0); var xmlRoot = XElement.Parse(xml); variables.AssemblySemVer.ShouldNotBeNull(); ProjectFileUpdater.UpdateProjectVersionElement(xmlRoot, ProjectFileUpdater.AssemblyVersionElement, variables.AssemblySemVer); @@ -258,7 +241,7 @@ public void UpdateProjectXmlVersionElementWithMultipleVersionElementsLastOneIsMo Exe - netcoreapp3.1 + net6.0 1.0.0.0 2.0.0.0 @@ -270,25 +253,24 @@ public void UpdateProjectXmlVersionElementWithMultipleVersionElementsLastOneIsMo Exe - netcoreapp3.1 + net6.0 ")] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateProjectFileAddsVersionToFile(string xml) { - var fileName = PathHelper.Combine(Path.GetTempPath(), "TestProject.csproj"); + var workingDirectory = PathHelper.GetTempPath(); + var fileName = PathHelper.Combine(workingDirectory, "TestProject.csproj"); VerifyAssemblyInfoFile(xml, fileName, AssemblyVersioningScheme.MajorMinorPatch, (fs, variables) => { using var projFileUpdater = new ProjectFileUpdater(this.log, fs); - projFileUpdater.Execute(variables, new AssemblyInfoContext(Path.GetTempPath(), false, fileName)); + projFileUpdater.Execute(variables, new(workingDirectory, false, fileName)); const string expectedXml = @" Exe - netcoreapp3.1 + net6.0 2.3.1.0 2.3.1.0 2.3.1+3.Branch.foo.Sha.hash @@ -304,12 +286,12 @@ private void VerifyAssemblyInfoFile( string projectFileContent, string fileName, AssemblyVersioningScheme versioningScheme = AssemblyVersioningScheme.MajorMinorPatch, - Action? verify = null) + Action? verify = null) { this.fileSystem = Substitute.For(); var version = new SemanticVersion { - BuildMetaData = new SemanticVersionBuildMetaData("versionSourceHash", 3, "foo", "hash", "shortHash", DateTimeOffset.Now, 0), + BuildMetaData = new("versionSourceHash", 3, "foo", "hash", "shortHash", DateTimeOffset.Now, 0), Major = 2, Minor = 3, Patch = 1 @@ -323,8 +305,8 @@ private void VerifyAssemblyInfoFile( this.fileSystem.ReadAllText(fileName).Returns(projectFileContent); }); - var config = new TestEffectiveConfiguration(versioningScheme); - var variables = this.variableProvider.GetVariablesFor(version, config, false); + var configuration = EmptyConfigurationBuilder.New.WithAssemblyVersioningScheme(versioningScheme).Build(); + var variables = this.variableProvider.GetVariablesFor(version, configuration, 0); verify?.Invoke(this.fileSystem, variables); } diff --git a/src/GitVersion.Core.Tests/VersionConverters/WixFileTests.cs b/src/GitVersion.Output.Tests/Output/WixFileTests.cs similarity index 63% rename from src/GitVersion.Core.Tests/VersionConverters/WixFileTests.cs rename to src/GitVersion.Output.Tests/Output/WixFileTests.cs index 3e5758bb81..4d41fec15b 100644 --- a/src/GitVersion.Core.Tests/VersionConverters/WixFileTests.cs +++ b/src/GitVersion.Output.Tests/Output/WixFileTests.cs @@ -1,11 +1,10 @@ +using GitVersion.Configuration; using GitVersion.Core.Tests.Helpers; using GitVersion.Helpers; using GitVersion.Logging; +using GitVersion.Output.WixUpdater; using GitVersion.VersionCalculation; -using GitVersion.VersionConverters.WixUpdater; using Microsoft.Extensions.DependencyInjection; -using NUnit.Framework; -using Shouldly; namespace GitVersion.Core.Tests; @@ -13,30 +12,34 @@ namespace GitVersion.Core.Tests; [Parallelizable(ParallelScope.None)] internal class WixFileTests : TestBase { + private string workingDir; + + [OneTimeSetUp] + public void OneTimeSetUp() => workingDir = PathHelper.Combine(PathHelper.GetTempPath(), "WixFileTests"); + + [OneTimeTearDown] + public void OneTimeTearDown() => DirectoryHelper.DeleteDirectory(workingDir); + [SetUp] public void Setup() => ShouldlyConfiguration.ShouldMatchApprovedDefaults.LocateTestMethodUsingAttribute(); [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateWixVersionFile() { - var workingDir = Path.GetTempPath(); var semVer = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.develop" + BuildMetaData = new("5.Branch.develop") + { + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2019-02-20 23:59:59Z") + } }; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2019-02-20 23:59:59Z"); - - var config = new TestEffectiveConfiguration(buildMetaDataPadding: 2, legacySemVerPadding: 5); - var stringBuilder = new StringBuilder(); void Action(string s) => stringBuilder.AppendLine(s); @@ -47,11 +50,11 @@ public void UpdateWixVersionFile() var fileSystem = sp.GetRequiredService(); var variableProvider = sp.GetRequiredService(); - var versionVariables = variableProvider.GetVariablesFor(semVer, config, false); + var versionVariables = variableProvider.GetVariablesFor(semVer, EmptyConfigurationBuilder.New.Build(), 0); using var wixVersionFileUpdater = sp.GetRequiredService(); - wixVersionFileUpdater.Execute(versionVariables, new WixVersionContext(workingDir)); + wixVersionFileUpdater.Execute(versionVariables, new(workingDir)); var file = PathHelper.Combine(workingDir, WixVersionFileUpdater.WixVersionFileName); fileSystem @@ -60,26 +63,22 @@ public void UpdateWixVersionFile() } [Test] - [Category(NoMono)] - [Description(NoMonoDescription)] public void UpdateWixVersionFileWhenFileAlreadyExists() { - var workingDir = Path.GetTempPath(); var semVer = new SemanticVersion { Major = 1, Minor = 2, Patch = 3, - BuildMetaData = "5.Branch.develop" + BuildMetaData = new("5.Branch.develop") + { + VersionSourceSha = "versionSourceSha", + Sha = "commitSha", + ShortSha = "commitShortSha", + CommitDate = DateTimeOffset.Parse("2019-02-20 23:59:59Z") + } }; - semVer.BuildMetaData.VersionSourceSha = "versionSourceSha"; - semVer.BuildMetaData.Sha = "commitSha"; - semVer.BuildMetaData.ShortSha = "commitShortSha"; - semVer.BuildMetaData.CommitDate = DateTimeOffset.Parse("2019-02-20 23:59:59Z"); - - var config = new TestEffectiveConfiguration(buildMetaDataPadding: 2, legacySemVerPadding: 5); - var stringBuilder = new StringBuilder(); void Action(string s) => stringBuilder.AppendLine(s); @@ -90,19 +89,18 @@ public void UpdateWixVersionFileWhenFileAlreadyExists() var fileSystem = sp.GetRequiredService(); var variableProvider = sp.GetRequiredService(); - var versionVariables = variableProvider.GetVariablesFor(semVer, config, false); + var versionVariables = variableProvider.GetVariablesFor(semVer, EmptyConfigurationBuilder.New.Build(), 0); using var wixVersionFileUpdater = sp.GetRequiredService(); // fake an already existing file var file = PathHelper.Combine(workingDir, WixVersionFileUpdater.WixVersionFileName); - fileSystem.WriteAllText(file, new string('x', 1024 * 1024)); + fileSystem.WriteAllText(file, new('x', 1024 * 1024)); - wixVersionFileUpdater.Execute(versionVariables, new WixVersionContext(workingDir)); + wixVersionFileUpdater.Execute(versionVariables, new(workingDir)); fileSystem .ReadAllText(file) .ShouldMatchApproved(c => c.SubFolder(PathHelper.Combine("Approved"))); } - } diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AddFormats/VersionAssemblyInfo.cs b/src/GitVersion.Output/AssemblyInfo/AddFormats/VersionAssemblyInfo.cs similarity index 100% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/AddFormats/VersionAssemblyInfo.cs rename to src/GitVersion.Output/AssemblyInfo/AddFormats/VersionAssemblyInfo.cs diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AddFormats/VersionAssemblyInfo.fs b/src/GitVersion.Output/AssemblyInfo/AddFormats/VersionAssemblyInfo.fs similarity index 100% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/AddFormats/VersionAssemblyInfo.fs rename to src/GitVersion.Output/AssemblyInfo/AddFormats/VersionAssemblyInfo.fs diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AddFormats/VersionAssemblyInfo.vb b/src/GitVersion.Output/AssemblyInfo/AddFormats/VersionAssemblyInfo.vb similarity index 100% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/AddFormats/VersionAssemblyInfo.vb rename to src/GitVersion.Output/AssemblyInfo/AddFormats/VersionAssemblyInfo.vb diff --git a/src/GitVersion.Output/AssemblyInfo/AssemblyInfoContext.cs b/src/GitVersion.Output/AssemblyInfo/AssemblyInfoContext.cs new file mode 100644 index 0000000000..c8e51572dd --- /dev/null +++ b/src/GitVersion.Output/AssemblyInfo/AssemblyInfoContext.cs @@ -0,0 +1,4 @@ +namespace GitVersion.Output.AssemblyInfo; + +internal readonly record struct AssemblyInfoContext(string WorkingDirectory, bool EnsureAssemblyInfo, params string[] AssemblyInfoFiles) + : IConverterContext; diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AssemblyInfoFileUpdater.cs b/src/GitVersion.Output/AssemblyInfo/AssemblyInfoFileUpdater.cs similarity index 76% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/AssemblyInfoFileUpdater.cs rename to src/GitVersion.Output/AssemblyInfo/AssemblyInfoFileUpdater.cs index c2e64710a6..725edfb9c4 100644 --- a/src/GitVersion.Core/VersionConverters/AssemblyInfo/AssemblyInfoFileUpdater.cs +++ b/src/GitVersion.Output/AssemblyInfo/AssemblyInfoFileUpdater.cs @@ -4,16 +4,14 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.VersionConverters.AssemblyInfo; +namespace GitVersion.Output.AssemblyInfo; -public interface IAssemblyInfoFileUpdater : IVersionConverter -{ -} +internal interface IAssemblyInfoFileUpdater : IVersionConverter; -public sealed class AssemblyInfoFileUpdater : IAssemblyInfoFileUpdater +internal sealed class AssemblyInfoFileUpdater(ILog log, IFileSystem fileSystem) : IAssemblyInfoFileUpdater { - private readonly List restoreBackupTasks = new(); - private readonly List cleanupBackupTasks = new(); + private readonly List restoreBackupTasks = []; + private readonly List cleanupBackupTasks = []; private readonly IDictionary assemblyAttributeRegexes = new Dictionary { @@ -28,22 +26,13 @@ public sealed class AssemblyInfoFileUpdater : IAssemblyInfoFileUpdater private const string NewLine = "\r\n"; - private readonly IFileSystem fileSystem; - private readonly ILog log; - private readonly TemplateManager templateManager; - - public AssemblyInfoFileUpdater(ILog log, IFileSystem fileSystem) - { - this.fileSystem = fileSystem; - this.log = log; - this.templateManager = new TemplateManager(TemplateType.AssemblyInfo); - } + private readonly TemplateManager templateManager = new(TemplateType.AssemblyInfo); - public void Execute(VersionVariables variables, AssemblyInfoContext context) + public void Execute(GitVersionVariables variables, AssemblyInfoContext context) { var assemblyInfoFiles = GetAssemblyInfoFiles(context).ToList(); - this.log.Info("Updating assembly info files"); - this.log.Info($"Found {assemblyInfoFiles.Count} files"); + log.Info("Updating assembly info files"); + log.Info($"Found {assemblyInfoFiles.Count} files"); var assemblyVersion = variables.AssemblySemVer; var assemblyVersionString = !assemblyVersion.IsNullOrWhiteSpace() ? $"AssemblyVersion(\"{assemblyVersion}\")" : null; @@ -58,21 +47,21 @@ public void Execute(VersionVariables variables, AssemblyInfoContext context) { var localAssemblyInfo = assemblyInfoFile.FullName; var backupAssemblyInfo = localAssemblyInfo + ".bak"; - this.fileSystem.Copy(localAssemblyInfo, backupAssemblyInfo, true); + fileSystem.Copy(localAssemblyInfo, backupAssemblyInfo, true); this.restoreBackupTasks.Add(() => { - if (this.fileSystem.Exists(localAssemblyInfo)) + if (fileSystem.Exists(localAssemblyInfo)) { - this.fileSystem.Delete(localAssemblyInfo); + fileSystem.Delete(localAssemblyInfo); } - this.fileSystem.Move(backupAssemblyInfo, localAssemblyInfo); + fileSystem.Move(backupAssemblyInfo, localAssemblyInfo); }); - this.cleanupBackupTasks.Add(() => this.fileSystem.Delete(backupAssemblyInfo)); + this.cleanupBackupTasks.Add(() => fileSystem.Delete(backupAssemblyInfo)); - var originalFileContents = this.fileSystem.ReadAllText(localAssemblyInfo); + var originalFileContents = fileSystem.ReadAllText(localAssemblyInfo); var fileContents = originalFileContents; var appendedAttributes = false; @@ -99,7 +88,7 @@ public void Execute(VersionVariables variables, AssemblyInfoContext context) if (originalFileContents != fileContents) { - this.fileSystem.WriteAllText(localAssemblyInfo, fileContents); + fileSystem.WriteAllText(localAssemblyInfo, fileContents); } } CommitChanges(); @@ -141,7 +130,7 @@ private string ReplaceOrInsertAfterLastAssemblyAttributeOrAppend(Regex replaceRe var assemblyMatches = assemblyRegex.Matches(inputString); if (assemblyMatches.Count > 0) { - var lastMatch = assemblyMatches[assemblyMatches.Count - 1]; + var lastMatch = assemblyMatches[^1]; var replacementString = lastMatch.Value; if (!lastMatch.Value.EndsWith(NewLine)) replacementString += NewLine; if (assemblyAddFormat != null) @@ -177,7 +166,7 @@ private IEnumerable GetAssemblyInfoFiles(AssemblyInfoContext context) } else { - foreach (var item in this.fileSystem.DirectoryEnumerateFiles(workingDirectory, "AssemblyInfo.*", SearchOption.AllDirectories)) + foreach (var item in fileSystem.DirectoryEnumerateFiles(workingDirectory, "AssemblyInfo.*", SearchOption.AllDirectories)) { var assemblyInfoFile = new FileInfo(item); @@ -192,7 +181,7 @@ private IEnumerable GetAssemblyInfoFiles(AssemblyInfoContext context) private bool EnsureVersionAssemblyInfoFile(string fullPath, bool ensureAssemblyInfo) { fullPath = fullPath.NotNull(); - if (this.fileSystem.Exists(fullPath)) + if (fileSystem.Exists(fullPath)) { return true; } @@ -208,16 +197,16 @@ private bool EnsureVersionAssemblyInfoFile(string fullPath, bool ensureAssemblyI { var fileInfo = new FileInfo(fullPath); - if (fileInfo.Directory != null && !this.fileSystem.DirectoryExists(fileInfo.Directory.FullName)) + if (fileInfo.Directory != null && !fileSystem.DirectoryExists(fileInfo.Directory.FullName)) { - this.fileSystem.CreateDirectory(fileInfo.Directory.FullName); + fileSystem.CreateDirectory(fileInfo.Directory.FullName); } - this.fileSystem.WriteAllText(fullPath, assemblyInfoSource); + fileSystem.WriteAllText(fullPath, assemblyInfoSource); return true; } - this.log.Warning($"No version assembly info template available to create source file '{fullPath}'"); + log.Warning($"No version assembly info template available to create source file '{fullPath}'"); return false; } } diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/ProjectFileUpdater.cs b/src/GitVersion.Output/AssemblyInfo/ProjectFileUpdater.cs similarity index 67% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/ProjectFileUpdater.cs rename to src/GitVersion.Output/AssemblyInfo/ProjectFileUpdater.cs index 3670157dc1..8588f27153 100644 --- a/src/GitVersion.Core/VersionConverters/AssemblyInfo/ProjectFileUpdater.cs +++ b/src/GitVersion.Output/AssemblyInfo/ProjectFileUpdater.cs @@ -4,33 +4,24 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.VersionConverters.AssemblyInfo; +namespace GitVersion.Output.AssemblyInfo; -public interface IProjectFileUpdater : IVersionConverter +internal interface IProjectFileUpdater : IVersionConverter { bool CanUpdateProjectFile(XElement xmlRoot); } -public sealed class ProjectFileUpdater : IProjectFileUpdater +internal sealed class ProjectFileUpdater(ILog log, IFileSystem fileSystem) : IProjectFileUpdater { internal const string AssemblyVersionElement = "AssemblyVersion"; private const string FileVersionElement = "FileVersion"; private const string InformationalVersionElement = "InformationalVersion"; private const string VersionElement = "Version"; - private readonly List restoreBackupTasks = new(); - private readonly List cleanupBackupTasks = new(); + private readonly List restoreBackupTasks = []; + private readonly List cleanupBackupTasks = []; - private readonly IFileSystem fileSystem; - private readonly ILog log; - - public ProjectFileUpdater(ILog log, IFileSystem fileSystem) - { - this.fileSystem = fileSystem; - this.log = log; - } - - public void Execute(VersionVariables variables, AssemblyInfoContext context) + public void Execute(GitVersionVariables variables, AssemblyInfoContext context) { if (context.EnsureAssemblyInfo) throw new WarningException($"Configuration setting {nameof(context.EnsureAssemblyInfo)} is not valid when updating project files!"); @@ -40,13 +31,13 @@ public void Execute(VersionVariables variables, AssemblyInfoContext context) var assemblyVersion = variables.AssemblySemVer; var assemblyInfoVersion = variables.InformationalVersion; var assemblyFileVersion = variables.AssemblySemFileVer; - var packageVersion = variables.NuGetVersion; + var packageVersion = variables.SemVer; foreach (var projectFile in projectFilesToUpdate) { var localProjectFile = projectFile.FullName; - var originalFileContents = this.fileSystem.ReadAllText(localProjectFile); + var originalFileContents = fileSystem.ReadAllText(localProjectFile); XElement fileXml; try { @@ -59,26 +50,26 @@ public void Execute(VersionVariables variables, AssemblyInfoContext context) if (!CanUpdateProjectFile(fileXml)) { - this.log.Warning($"Unable to update file: {localProjectFile}"); + log.Warning($"Unable to update file: {localProjectFile}"); continue; } - this.log.Debug($"Update file: {localProjectFile}"); + log.Debug($"Update file: {localProjectFile}"); var backupProjectFile = localProjectFile + ".bak"; - this.fileSystem.Copy(localProjectFile, backupProjectFile, true); + fileSystem.Copy(localProjectFile, backupProjectFile, true); this.restoreBackupTasks.Add(() => { - if (this.fileSystem.Exists(localProjectFile)) + if (fileSystem.Exists(localProjectFile)) { - this.fileSystem.Delete(localProjectFile); + fileSystem.Delete(localProjectFile); } - this.fileSystem.Move(backupProjectFile, localProjectFile); + fileSystem.Move(backupProjectFile, localProjectFile); }); - this.cleanupBackupTasks.Add(() => this.fileSystem.Delete(backupProjectFile)); + this.cleanupBackupTasks.Add(() => fileSystem.Delete(backupProjectFile)); if (!assemblyVersion.IsNullOrWhiteSpace()) { @@ -103,7 +94,7 @@ public void Execute(VersionVariables variables, AssemblyInfoContext context) var outputXmlString = fileXml.ToString(); if (originalFileContents != outputXmlString) { - this.fileSystem.WriteAllText(localProjectFile, outputXmlString); + fileSystem.WriteAllText(localProjectFile, outputXmlString); } } @@ -114,28 +105,28 @@ public bool CanUpdateProjectFile(XElement xmlRoot) { if (xmlRoot.Name != "Project") { - this.log.Warning("Invalid project file specified, root element must be ."); + log.Warning("Invalid project file specified, root element must be ."); return false; } var sdkAttribute = xmlRoot.Attribute("Sdk"); - if (sdkAttribute == null || !sdkAttribute.Value.StartsWith("Microsoft.NET.Sdk")) + if (sdkAttribute?.Value.StartsWith("Microsoft.NET.Sdk") != true) { - this.log.Warning($"Specified project file Sdk ({sdkAttribute?.Value}) is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); + log.Warning($"Specified project file Sdk ({sdkAttribute?.Value}) is not supported, please ensure the project sdk starts with 'Microsoft.NET.Sdk'"); return false; } var propertyGroups = xmlRoot.Descendants("PropertyGroup").ToList(); - if (!propertyGroups.Any()) + if (propertyGroups.Count == 0) { - this.log.Warning("Unable to locate any elements in specified project file. Are you sure it is in a correct format?"); + log.Warning("Unable to locate any elements in specified project file. Are you sure it is in a correct format?"); return false; } var lastGenerateAssemblyInfoElement = propertyGroups.SelectMany(s => s.Elements("GenerateAssemblyInfo")).LastOrDefault(); - if (lastGenerateAssemblyInfoElement != null && (bool)lastGenerateAssemblyInfoElement == false) + if (lastGenerateAssemblyInfoElement != null && !(bool)lastGenerateAssemblyInfoElement) { - this.log.Warning("Project file specifies false: versions set in this project file will not affect the output artifacts."); + log.Warning("Project file specifies false: versions set in this project file will not affect the output artifacts."); return false; } @@ -147,7 +138,7 @@ internal static void UpdateProjectVersionElement(XElement xmlRoot, string versio var propertyGroups = xmlRoot.Descendants("PropertyGroup").ToList(); var propertyGroupToModify = propertyGroups.LastOrDefault(l => l.Element(versionElement) != null) - ?? propertyGroups.First(); + ?? propertyGroups[0]; var versionXmlElement = propertyGroupToModify.Elements(versionElement).LastOrDefault(); if (versionXmlElement != null) @@ -193,19 +184,19 @@ private IEnumerable GetProjectFiles(AssemblyInfoContext context) { var fullPath = PathHelper.Combine(workingDirectory, item); - if (this.fileSystem.Exists(fullPath)) + if (fileSystem.Exists(fullPath)) { yield return new FileInfo(fullPath); } else { - this.log.Warning($"Specified file {fullPath} was not found and will not be updated."); + log.Warning($"Specified file {fullPath} was not found and will not be updated."); } } } else { - foreach (var item in this.fileSystem.DirectoryEnumerateFiles(workingDirectory, "*", SearchOption.AllDirectories).Where(IsSupportedProjectFile)) + foreach (var item in fileSystem.DirectoryEnumerateFiles(workingDirectory, "*", SearchOption.AllDirectories).Where(IsSupportedProjectFile)) { var assemblyInfoFile = new FileInfo(item); diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/Templates/VersionAssemblyInfo.cs b/src/GitVersion.Output/AssemblyInfo/Templates/VersionAssemblyInfo.cs similarity index 100% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/Templates/VersionAssemblyInfo.cs rename to src/GitVersion.Output/AssemblyInfo/Templates/VersionAssemblyInfo.cs diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/Templates/VersionAssemblyInfo.fs b/src/GitVersion.Output/AssemblyInfo/Templates/VersionAssemblyInfo.fs similarity index 100% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/Templates/VersionAssemblyInfo.fs rename to src/GitVersion.Output/AssemblyInfo/Templates/VersionAssemblyInfo.fs diff --git a/src/GitVersion.Core/VersionConverters/AssemblyInfo/Templates/VersionAssemblyInfo.vb b/src/GitVersion.Output/AssemblyInfo/Templates/VersionAssemblyInfo.vb similarity index 100% rename from src/GitVersion.Core/VersionConverters/AssemblyInfo/Templates/VersionAssemblyInfo.vb rename to src/GitVersion.Output/AssemblyInfo/Templates/VersionAssemblyInfo.vb diff --git a/src/GitVersion.Output/GitVersion.Output.csproj b/src/GitVersion.Output/GitVersion.Output.csproj new file mode 100644 index 0000000000..8b771aa5b5 --- /dev/null +++ b/src/GitVersion.Output/GitVersion.Output.csproj @@ -0,0 +1,32 @@ + + + + GITVERSION_OUTPUT + + + + + + + + + + + + + + + Attributes\JsonPropertyDescriptionAttribute.cs + + + + + + + + + + + + + diff --git a/src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.cs b/src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.cs new file mode 100644 index 0000000000..56f191a449 --- /dev/null +++ b/src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.cs @@ -0,0 +1 @@ +public const string {0} = "{1}"; diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.fs b/src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.fs similarity index 100% rename from src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.fs rename to src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.fs diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.vb b/src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.vb similarity index 100% rename from src/GitVersion.Core/VersionConverters/GitVersionInfo/AddFormats/GitVersionInformation.vb rename to src/GitVersion.Output/GitVersionInfo/AddFormats/GitVersionInformation.vb diff --git a/src/GitVersion.Output/GitVersionInfo/GitVersionInfoContext.cs b/src/GitVersion.Output/GitVersionInfo/GitVersionInfoContext.cs new file mode 100644 index 0000000000..27217adf90 --- /dev/null +++ b/src/GitVersion.Output/GitVersionInfo/GitVersionInfoContext.cs @@ -0,0 +1,14 @@ +namespace GitVersion.Output.GitVersionInfo; + +internal readonly record struct GitVersionInfoContext( + string WorkingDirectory, + string FileName, + string FileExtension, + string? TargetNamespace = null) + : IConverterContext +{ + public GitVersionInfoContext(string workingDirectory, string fileName, string fileExtension) + : this(workingDirectory, fileName, fileExtension, null) + { + } +} diff --git a/src/GitVersion.Output/GitVersionInfo/GitVersionInfoGenerator.cs b/src/GitVersion.Output/GitVersionInfo/GitVersionInfoGenerator.cs new file mode 100644 index 0000000000..2756280988 --- /dev/null +++ b/src/GitVersion.Output/GitVersionInfo/GitVersionInfoGenerator.cs @@ -0,0 +1,82 @@ +using GitVersion.Extensions; +using GitVersion.Helpers; +using GitVersion.OutputVariables; + +namespace GitVersion.Output.GitVersionInfo; + +internal interface IGitVersionInfoGenerator : IVersionConverter; + +internal sealed class GitVersionInfoGenerator(IFileSystem fileSystem) : IGitVersionInfoGenerator +{ + private const string targetNamespaceSentinelValue = ""; + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly TemplateManager templateManager = new(TemplateType.GitVersionInfo); + + public void Execute(GitVersionVariables variables, GitVersionInfoContext context) + { + var fileName = context.FileName; + var directory = context.WorkingDirectory; + var filePath = PathHelper.Combine(directory, fileName); + + string? originalFileContents = null; + + if (File.Exists(filePath)) + { + originalFileContents = this.fileSystem.ReadAllText(filePath); + } + + var fileExtension = Path.GetExtension(filePath); + var template = this.templateManager.GetTemplateFor(fileExtension); + var addFormat = this.templateManager.GetAddFormatFor(fileExtension); + var targetNamespace = getTargetNamespace(fileExtension); + + if (string.IsNullOrWhiteSpace(template) || string.IsNullOrWhiteSpace(addFormat) || targetNamespace == targetNamespaceSentinelValue) + return; + + var indentation = GetIndentation(fileExtension); + string? closeBracket = null; + string? openBracket = null; + string indent = ""; + + if (!string.IsNullOrWhiteSpace(targetNamespace) && fileExtension == ".cs") + { + indent = " "; + closeBracket = PathHelper.NewLine + "}"; + openBracket = PathHelper.NewLine + "{"; + indentation += " "; + } + + var lines = variables.OrderBy(x => x.Key).Select(v => string.Format(indentation + addFormat, v.Key, v.Value)); + var members = string.Join(PathHelper.NewLine, lines); + + var fileContents = string.Format(template, members, targetNamespace, openBracket, closeBracket, indent); + + if (fileContents != originalFileContents) + { + this.fileSystem.WriteAllText(filePath, fileContents); + } + + return; + + string getTargetNamespace(string extension) => extension switch + { + ".vb" => context.TargetNamespace ?? "Global", + ".cs" => context.TargetNamespace != null ? $"{PathHelper.NewLine}namespace {context.TargetNamespace};" : "", + ".fs" => context.TargetNamespace ?? "global", + _ => targetNamespaceSentinelValue, + }; + } + + public void Dispose() + { + } + + // Because The VB-generated class is included in a namespace declaration, + // the properties must be offset by 2 tabs. + // Whereas in the C# and F# cases, 1 tab is enough. + private static string GetIndentation(string fileExtension) + { + var tabs = fileExtension.EndsWith("vb", StringComparison.InvariantCultureIgnoreCase) ? 2 : 1; + return new string(' ', tabs * 4); + } +} diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.cs b/src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.cs similarity index 85% rename from src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.cs rename to src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.cs index 53e9b35ead..12deef9fa3 100644 --- a/src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.cs +++ b/src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.cs @@ -23,10 +23,10 @@ namespace System.Diagnostics.CodeAnalysis internal sealed class ExcludeFromCodeCoverageAttribute : global::System.Attribute {{ }} }} #endif - -[global::System.Runtime.CompilerServices.CompilerGenerated] -[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] -static class GitVersionInformation -{{ +{1}{2} +{4}[global::System.Runtime.CompilerServices.CompilerGenerated] +{4}[global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] +{4}static class GitVersionInformation +{4}{{ {0} -}} +{4}}}{3} diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.fs b/src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.fs similarity index 98% rename from src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.fs rename to src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.fs index 561bc56f75..0862986636 100644 --- a/src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.fs +++ b/src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.fs @@ -24,7 +24,7 @@ namespace System.Diagnostics.CodeAnalysis type ExcludeFromCodeCoverageAttribute() = inherit global.System.Attribute() #endif -namespace global +namespace {1} [] [] diff --git a/src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.vb b/src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.vb similarity index 98% rename from src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.vb rename to src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.vb index d9cd68db27..b7f3b7b923 100644 --- a/src/GitVersion.Core/VersionConverters/GitVersionInfo/Templates/GitVersionInformation.vb +++ b/src/GitVersion.Output/GitVersionInfo/Templates/GitVersionInformation.vb @@ -24,7 +24,7 @@ Namespace Global.System.Diagnostics.CodeAnalysis End Namespace #End If -Namespace Global +Namespace {1} diff --git a/src/GitVersion.Core/VersionConverters/VersionConvertersModule.cs b/src/GitVersion.Output/GitVersionOutputModule.cs similarity index 54% rename from src/GitVersion.Core/VersionConverters/VersionConvertersModule.cs rename to src/GitVersion.Output/GitVersionOutputModule.cs index 938c3a2f13..3787e1b9e2 100644 --- a/src/GitVersion.Core/VersionConverters/VersionConvertersModule.cs +++ b/src/GitVersion.Output/GitVersionOutputModule.cs @@ -1,16 +1,19 @@ -using GitVersion.VersionConverters.AssemblyInfo; -using GitVersion.VersionConverters.GitVersionInfo; -using GitVersion.VersionConverters.OutputGenerator; -using GitVersion.VersionConverters.WixUpdater; +using GitVersion.Output.AssemblyInfo; +using GitVersion.Output.GitVersionInfo; +using GitVersion.Output.OutputGenerator; +using GitVersion.Output.WixUpdater; +using GitVersion.OutputVariables; using Microsoft.Extensions.DependencyInjection; -namespace GitVersion.VersionConverters; +namespace GitVersion.Output; -public class VersionConvertersModule : IGitVersionModule +public class GitVersionOutputModule : IGitVersionModule { public void RegisterTypes(IServiceCollection services) { + services.AddSingleton(); services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); services.AddSingleton(); diff --git a/src/GitVersion.Output/GitVersionOutputTool.cs b/src/GitVersion.Output/GitVersionOutputTool.cs new file mode 100644 index 0000000000..510995866a --- /dev/null +++ b/src/GitVersion.Output/GitVersionOutputTool.cs @@ -0,0 +1,73 @@ +using GitVersion.Extensions; +using GitVersion.Output.AssemblyInfo; +using GitVersion.Output.GitVersionInfo; +using GitVersion.Output.OutputGenerator; +using GitVersion.Output.WixUpdater; +using GitVersion.OutputVariables; +using Microsoft.Extensions.Options; + +namespace GitVersion; + +internal class GitVersionOutputTool( + IOptions options, + IOutputGenerator outputGenerator, + IWixVersionFileUpdater wixVersionFileUpdater, + IGitVersionInfoGenerator gitVersionInfoGenerator, + IAssemblyInfoFileUpdater assemblyInfoFileUpdater, + IProjectFileUpdater projectFileUpdater) + : IGitVersionOutputTool +{ + private readonly GitVersionOptions gitVersionOptions = options.Value.NotNull(); + private readonly IOutputGenerator outputGenerator = outputGenerator.NotNull(); + private readonly IWixVersionFileUpdater wixVersionFileUpdater = wixVersionFileUpdater.NotNull(); + private readonly IGitVersionInfoGenerator gitVersionInfoGenerator = gitVersionInfoGenerator.NotNull(); + private readonly IAssemblyInfoFileUpdater assemblyInfoFileUpdater = assemblyInfoFileUpdater.NotNull(); + private readonly IProjectFileUpdater projectFileUpdater = projectFileUpdater.NotNull(); + + public void OutputVariables(GitVersionVariables variables, bool updateBuildNumber) + { + using (this.outputGenerator) + { + this.outputGenerator.Execute(variables, new OutputContext(gitVersionOptions.WorkingDirectory, gitVersionOptions.OutputFile, updateBuildNumber)); + } + } + + public void UpdateAssemblyInfo(GitVersionVariables variables) + { + var assemblyInfoContext = new AssemblyInfoContext(gitVersionOptions.WorkingDirectory, gitVersionOptions.AssemblySettingsInfo.EnsureAssemblyInfo, [.. gitVersionOptions.AssemblySettingsInfo.Files]); + + if (gitVersionOptions.AssemblySettingsInfo.UpdateProjectFiles) + { + using (this.projectFileUpdater) + { + this.projectFileUpdater.Execute(variables, assemblyInfoContext); + } + } + else if (gitVersionOptions.AssemblySettingsInfo.UpdateAssemblyInfo) + { + using (this.assemblyInfoFileUpdater) + { + this.assemblyInfoFileUpdater.Execute(variables, assemblyInfoContext); + } + } + } + + public void UpdateWixVersionFile(GitVersionVariables variables) + { + if (gitVersionOptions.WixInfo.UpdateWixVersionFile) + { + using (this.wixVersionFileUpdater) + { + this.wixVersionFileUpdater.Execute(variables, new WixVersionContext(gitVersionOptions.WorkingDirectory)); + } + } + } + + public void GenerateGitVersionInformation(GitVersionVariables variables, FileWriteInfo fileWriteInfo, string? targetNamespace = null) + { + using (this.gitVersionInfoGenerator) + { + this.gitVersionInfoGenerator.Execute(variables, new GitVersionInfoContext(gitVersionOptions.WorkingDirectory, fileWriteInfo.FileName, fileWriteInfo.FileExtension, targetNamespace)); + } + } +} diff --git a/src/GitVersion.Output/IGitVersionOutputTool.cs b/src/GitVersion.Output/IGitVersionOutputTool.cs new file mode 100644 index 0000000000..16654a01c6 --- /dev/null +++ b/src/GitVersion.Output/IGitVersionOutputTool.cs @@ -0,0 +1,11 @@ +using GitVersion.OutputVariables; + +namespace GitVersion; + +public interface IGitVersionOutputTool +{ + void OutputVariables(GitVersionVariables variables, bool updateBuildNumber); + void UpdateAssemblyInfo(GitVersionVariables variables); + void UpdateWixVersionFile(GitVersionVariables variables); + void GenerateGitVersionInformation(GitVersionVariables variables, FileWriteInfo fileWriteInfo, string? targetNamespace = null); +} diff --git a/src/GitVersion.Output/OutputGenerator/OutputContext.cs b/src/GitVersion.Output/OutputGenerator/OutputContext.cs new file mode 100644 index 0000000000..98ad1474ff --- /dev/null +++ b/src/GitVersion.Output/OutputGenerator/OutputContext.cs @@ -0,0 +1,3 @@ +namespace GitVersion.Output.OutputGenerator; + +internal readonly record struct OutputContext(string WorkingDirectory, string? OutputFile, bool? UpdateBuildNumber) : IConverterContext; diff --git a/src/GitVersion.Output/OutputGenerator/OutputGenerator.cs b/src/GitVersion.Output/OutputGenerator/OutputGenerator.cs new file mode 100644 index 0000000000..24a715e95d --- /dev/null +++ b/src/GitVersion.Output/OutputGenerator/OutputGenerator.cs @@ -0,0 +1,97 @@ +using GitVersion.Agents; +using GitVersion.Extensions; +using GitVersion.Helpers; +using GitVersion.Logging; +using GitVersion.OutputVariables; +using Microsoft.Extensions.Options; + +namespace GitVersion.Output.OutputGenerator; + +internal interface IOutputGenerator : IVersionConverter; + +internal sealed class OutputGenerator( + ICurrentBuildAgent buildAgent, + IConsole console, + IFileSystem fileSystem, + IVersionVariableSerializer serializer, + IEnvironment environment, + IOptions options) + : IOutputGenerator +{ + private readonly IConsole console = console.NotNull(); + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly IVersionVariableSerializer serializer = serializer.NotNull(); + private readonly IOptions options = options.NotNull(); + private readonly ICurrentBuildAgent buildAgent = buildAgent.NotNull(); + + public void Execute(GitVersionVariables variables, OutputContext context) + { + var gitVersionOptions = this.options.Value; + if (gitVersionOptions.Output.Contains(OutputType.BuildServer)) + { + this.buildAgent.WriteIntegration(this.console.WriteLine, variables, context.UpdateBuildNumber ?? true); + } + + var json = this.serializer.ToJson(variables); + if (gitVersionOptions.Output.Contains(OutputType.File)) + { + var retryOperation = new RetryAction(); + retryOperation.Execute(() => + { + if (context.OutputFile != null) this.fileSystem.WriteAllText(context.OutputFile, json); + }); + } + + if (!gitVersionOptions.Output.Contains(OutputType.Json)) return; + + if (gitVersionOptions.ShowVariable is null && gitVersionOptions.Format is null) + { + this.console.WriteLine(json); + return; + } + + if (gitVersionOptions.ShowVariable is not null && gitVersionOptions.Format is not null) + { + throw new WarningException("Cannot specify both /showvariable and /format"); + } + + if (gitVersionOptions.ShowVariable is not null) + { + if (!variables.TryGetValue(gitVersionOptions.ShowVariable, out var part)) + { + throw new WarningException($"'{gitVersionOptions.ShowVariable}' variable does not exist"); + } + + this.console.WriteLine(part); + return; + } + + if (gitVersionOptions.Format is not null) + { + var format = gitVersionOptions.Format; + var formatted = format.FormatWith(variables, environment); + this.console.WriteLine(formatted); + return; + } + + switch (gitVersionOptions.ShowVariable) + { + case null: + this.console.WriteLine(variables.ToString()); + break; + + default: + if (!variables.TryGetValue(gitVersionOptions.ShowVariable, out var part)) + { + throw new WarningException($"'{gitVersionOptions.ShowVariable}' variable does not exist"); + } + + this.console.WriteLine(part); + break; + } + } + + public void Dispose() + { + } +} diff --git a/src/GitVersion.Output/PublicAPI.Shipped.txt b/src/GitVersion.Output/PublicAPI.Shipped.txt new file mode 100644 index 0000000000..ab058de62d --- /dev/null +++ b/src/GitVersion.Output/PublicAPI.Shipped.txt @@ -0,0 +1 @@ +#nullable enable diff --git a/src/GitVersion.Output/PublicAPI.Unshipped.txt b/src/GitVersion.Output/PublicAPI.Unshipped.txt new file mode 100644 index 0000000000..a3558a8293 --- /dev/null +++ b/src/GitVersion.Output/PublicAPI.Unshipped.txt @@ -0,0 +1,12 @@ +#nullable enable +GitVersion.IGitVersionOutputTool +GitVersion.IGitVersionOutputTool.GenerateGitVersionInformation(GitVersion.OutputVariables.GitVersionVariables! variables, GitVersion.FileWriteInfo! fileWriteInfo, string? targetNamespace = null) -> void +GitVersion.IGitVersionOutputTool.OutputVariables(GitVersion.OutputVariables.GitVersionVariables! variables, bool updateBuildNumber) -> void +GitVersion.IGitVersionOutputTool.UpdateAssemblyInfo(GitVersion.OutputVariables.GitVersionVariables! variables) -> void +GitVersion.IGitVersionOutputTool.UpdateWixVersionFile(GitVersion.OutputVariables.GitVersionVariables! variables) -> void +GitVersion.Output.Attributes.JsonPropertyDescriptionAttribute +GitVersion.Output.Attributes.JsonPropertyDescriptionAttribute.Description.get -> string! +GitVersion.Output.Attributes.JsonPropertyDescriptionAttribute.JsonPropertyDescriptionAttribute(string! description) -> void +GitVersion.Output.GitVersionOutputModule +GitVersion.Output.GitVersionOutputModule.GitVersionOutputModule() -> void +GitVersion.Output.GitVersionOutputModule.RegisterTypes(Microsoft.Extensions.DependencyInjection.IServiceCollection! services) -> void \ No newline at end of file diff --git a/src/GitVersion.Output/Serializer/VersionVariableSerializer.cs b/src/GitVersion.Output/Serializer/VersionVariableSerializer.cs new file mode 100644 index 0000000000..b6243ea2aa --- /dev/null +++ b/src/GitVersion.Output/Serializer/VersionVariableSerializer.cs @@ -0,0 +1,112 @@ +using System.Text.Encodings.Web; +using GitVersion.Extensions; +using GitVersion.Helpers; + +namespace GitVersion.OutputVariables; + +internal class VersionVariableSerializer(IFileSystem fileSystem) : IVersionVariableSerializer +{ + public GitVersionVariables FromJson(string json) + { + var serializeOptions = JsonSerializerOptions(); + var variablePairs = JsonSerializer.Deserialize>(json, serializeOptions); + return FromDictionary(variablePairs); + } + + public string ToJson(GitVersionVariables gitVersionVariables) + { + var variablesType = typeof(VersionVariablesJsonModel); + var variables = new VersionVariablesJsonModel(); + + foreach (var (key, value) in gitVersionVariables.OrderBy(x => x.Key)) + { + var propertyInfo = variablesType.GetProperty(key); + propertyInfo?.SetValue(variables, ChangeType(value, propertyInfo.PropertyType)); + } + + var serializeOptions = JsonSerializerOptions(); + + return JsonSerializer.Serialize(variables, serializeOptions); + } + + public GitVersionVariables FromFile(string filePath) + { + try + { + var retryAction = new RetryAction(); + return retryAction.Execute(() => FromFileInternal(filePath)); + } + catch (AggregateException ex) + { + var lastException = ex.InnerExceptions.LastOrDefault() ?? ex.InnerException; + if (lastException != null) + { + throw lastException; + } + + throw; + } + } + + public void ToFile(GitVersionVariables gitVersionVariables, string filePath) + { + try + { + var retryAction = new RetryAction(); + retryAction.Execute(() => ToFileInternal(gitVersionVariables, filePath)); + } + catch (AggregateException ex) + { + var lastException = ex.InnerExceptions.LastOrDefault() ?? ex.InnerException; + if (lastException != null) + { + throw lastException; + } + + throw; + } + } + + private static GitVersionVariables FromDictionary(IEnumerable>? properties) + { + var type = typeof(GitVersionVariables); + var constructors = type.GetConstructors(); + + var ctor = constructors.Single(); + var ctorArgs = ctor.GetParameters() + .Select(p => properties?.Single(v => string.Equals(v.Key, p.Name, StringComparison.InvariantCultureIgnoreCase)).Value) + .Cast() + .ToArray(); + var instance = Activator.CreateInstance(type, ctorArgs).NotNull(); + return (GitVersionVariables)instance; + } + + private GitVersionVariables FromFileInternal(string filePath) + { + var json = fileSystem.ReadAllText(filePath); + return FromJson(json); + } + + private void ToFileInternal(GitVersionVariables gitVersionVariables, string filePath) + { + var json = ToJson(gitVersionVariables); + fileSystem.WriteAllText(filePath, json); + } + + private static JsonSerializerOptions JsonSerializerOptions() => new() { WriteIndented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, Converters = { new VersionVariablesJsonStringConverter() } }; + + private static object? ChangeType(object? value, Type type) + { + if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) + { + if (value == null || value.ToString()?.Length == 0) + { + return null; + } + + type = Nullable.GetUnderlyingType(type)!; + } + + return Convert.ChangeType(value, type); + } +} diff --git a/src/GitVersion.Output/Serializer/VersionVariablesJsonModel.cs b/src/GitVersion.Output/Serializer/VersionVariablesJsonModel.cs new file mode 100644 index 0000000000..89d32b254b --- /dev/null +++ b/src/GitVersion.Output/Serializer/VersionVariablesJsonModel.cs @@ -0,0 +1,81 @@ +using GitVersion.Output.Attributes; + +namespace GitVersion.OutputVariables; + +internal class VersionVariablesJsonModel +{ + [JsonPropertyDescription("Suitable for .NET AssemblyFileVersion. Defaults to Major.Minor.Patch.0.")] + public string? AssemblySemFileVer { get; set; } + + [JsonPropertyDescription("Suitable for .NET AssemblyVersion. Defaults to Major.Minor.0.0")] + public string? AssemblySemVer { get; set; } + + [JsonPropertyDescription("The name of the checked out Git branch.")] + public string? BranchName { get; set; } + + [JsonPropertyDescription("The build metadata, usually representing number of commits since the VersionSourceSha.")] + public int? BuildMetaData { get; set; } + + [JsonPropertyDescription("The ISO-8601 formatted date of the commit identified by Sha.")] + public string? CommitDate { get; set; } + + [JsonPropertyDescription("The number of commits since the version source.")] + public int? CommitsSinceVersionSource { get; set; } + + [JsonPropertyDescription("Equal to BranchName, but with / replaced with -.")] + public string? EscapedBranchName { get; set; } + + [JsonPropertyDescription("The BuildMetaData suffixed with BranchName and Sha.")] + public string? FullBuildMetaData { get; set; } + + [JsonPropertyDescription("The full, SemVer 2.0 compliant version number.")] + public string? FullSemVer { get; set; } + + [JsonPropertyDescription("Suitable for .NET AssemblyInformationalVersion. Defaults to FullSemVer suffixed by FullBuildMetaData.")] + public string? InformationalVersion { get; set; } + + [JsonPropertyDescription("The major version. Should be incremented on breaking changes.")] + public int? Major { get; set; } + + [JsonPropertyDescription("Major, Minor and Patch joined together, separated by '.'.")] + public string? MajorMinorPatch { get; set; } + + [JsonPropertyDescription("The minor version. Should be incremented on new features.")] + public int? Minor { get; set; } + + [JsonPropertyDescription("The patch version. Should be incremented on bug fixes.")] + public int? Patch { get; set; } + + [JsonPropertyDescription("The pre-release label is the name of the pre-release.")] + public string? PreReleaseLabel { get; set; } + + [JsonPropertyDescription("The pre-release label prefixed with a dash.")] + public string? PreReleaseLabelWithDash { get; set; } + + [JsonPropertyDescription("The pre-release number is the number of commits since the last version bump.")] + public int? PreReleaseNumber { get; set; } + + [JsonPropertyDescription("The pre-release tag is the pre-release label suffixed by the PreReleaseNumber.")] + public string? PreReleaseTag { get; set; } + + [JsonPropertyDescription("The pre-release tag prefixed with a dash.")] + public string? PreReleaseTagWithDash { get; set; } + + [JsonPropertyDescription("The semantic version number, including PreReleaseTagWithDash for pre-release version numbers.")] + public string? SemVer { get; set; } + + [JsonPropertyDescription("The SHA of the Git commit.")] + public string? Sha { get; set; } + + [JsonPropertyDescription("The Sha limited to 7 characters.")] + public string? ShortSha { get; set; } + + [JsonPropertyDescription("The number of uncommitted changes present in the repository.")] + public int? UncommittedChanges { get; set; } + + [JsonPropertyDescription("The SHA of the commit used as version source.")] + public string? VersionSourceSha { get; set; } + + [JsonPropertyDescription("A summation of branch specific pre-release-weight and the PreReleaseNumber. Can be used to obtain a monotonically increasing version number across the branches.")] + public int? WeightedPreReleaseNumber { get; set; } +} diff --git a/src/GitVersion.Core/Model/VersionVariablesJsonStringConverter.cs b/src/GitVersion.Output/Serializer/VersionVariablesJsonStringConverter.cs similarity index 89% rename from src/GitVersion.Core/Model/VersionVariablesJsonStringConverter.cs rename to src/GitVersion.Output/Serializer/VersionVariablesJsonStringConverter.cs index 375d54c266..236853f11d 100644 --- a/src/GitVersion.Core/Model/VersionVariablesJsonStringConverter.cs +++ b/src/GitVersion.Output/Serializer/VersionVariablesJsonStringConverter.cs @@ -1,11 +1,9 @@ using System.Buffers; using System.Buffers.Text; -using System.Text.Json; -using System.Text.Json.Serialization; namespace GitVersion.OutputVariables; -public class VersionVariablesJsonStringConverter : JsonConverter +internal class VersionVariablesJsonStringConverter : JsonConverter { public override bool CanConvert(Type typeToConvert) => typeToConvert == typeof(string); diff --git a/src/GitVersion.Core/VersionConverters/TemplateManager.cs b/src/GitVersion.Output/TemplateManager.cs similarity index 65% rename from src/GitVersion.Core/VersionConverters/TemplateManager.cs rename to src/GitVersion.Output/TemplateManager.cs index ebae681484..8246369fc2 100644 --- a/src/GitVersion.Core/VersionConverters/TemplateManager.cs +++ b/src/GitVersion.Output/TemplateManager.cs @@ -1,6 +1,6 @@ using GitVersion.Extensions; -namespace GitVersion.VersionConverters; +namespace GitVersion.Output; internal enum TemplateType { @@ -8,16 +8,10 @@ internal enum TemplateType GitVersionInfo } -internal class TemplateManager +internal class TemplateManager(TemplateType templateType) { - private readonly Dictionary templates; - private readonly Dictionary addFormats; - - public TemplateManager(TemplateType templateType) - { - this.templates = GetEmbeddedTemplates(templateType, "Templates").ToDictionary(Path.GetExtension, v => v, StringComparer.OrdinalIgnoreCase); - this.addFormats = GetEmbeddedTemplates(templateType, "AddFormats").ToDictionary(Path.GetExtension, v => v, StringComparer.OrdinalIgnoreCase); - } + private readonly Dictionary templates = GetEmbeddedTemplates(templateType, "Templates").ToDictionary(tuple => tuple.ext, tuple => tuple.name, StringComparer.OrdinalIgnoreCase); + private readonly Dictionary addFormats = GetEmbeddedTemplates(templateType, "AddFormats").ToDictionary(tuple => tuple.ext, tuple => tuple.name, StringComparer.OrdinalIgnoreCase); public string? GetTemplateFor(string fileExtension) { @@ -28,7 +22,7 @@ public TemplateManager(TemplateType templateType) string? result = null; - if (this.templates.TryGetValue(fileExtension, out var template) && template != null) + if (this.templates.TryGetValue(fileExtension, out var template)) { result = template.ReadAsStringFromEmbeddedResource(); } @@ -45,7 +39,7 @@ public TemplateManager(TemplateType templateType) string? result = null; - if (this.addFormats.TryGetValue(fileExtension, out var addFormat) && addFormat != null) + if (this.addFormats.TryGetValue(fileExtension, out var addFormat)) { result = addFormat.ReadAsStringFromEmbeddedResource().TrimEnd('\r', '\n'); } @@ -63,16 +57,15 @@ public bool IsSupported(string fileExtension) return this.templates.ContainsKey(fileExtension); } - private static IEnumerable GetEmbeddedTemplates(TemplateType templateType, string templateCategory) + private static IEnumerable<(string ext, string name)> GetEmbeddedTemplates(TemplateType templateType, string templateCategory) { - var assembly = typeof(TemplateManager).Assembly; foreach (var name in assembly.GetManifestResourceNames()) { if (name.Contains(templateType.ToString()) && name.Contains(templateCategory)) { - yield return name; + yield return (ext: Path.GetExtension(name), name); } } } diff --git a/src/GitVersion.Output/WixUpdater/WixVersionContext.cs b/src/GitVersion.Output/WixUpdater/WixVersionContext.cs new file mode 100644 index 0000000000..391beaf11d --- /dev/null +++ b/src/GitVersion.Output/WixUpdater/WixVersionContext.cs @@ -0,0 +1,3 @@ +namespace GitVersion.Output.WixUpdater; + +internal readonly record struct WixVersionContext(string WorkingDirectory) : IConverterContext; diff --git a/src/GitVersion.Core/VersionConverters/WixUpdater/WixVersionFileUpdater.cs b/src/GitVersion.Output/WixUpdater/WixVersionFileUpdater.cs similarity index 53% rename from src/GitVersion.Core/VersionConverters/WixUpdater/WixVersionFileUpdater.cs rename to src/GitVersion.Output/WixUpdater/WixVersionFileUpdater.cs index ca9bf494e3..3d2dfe0104 100644 --- a/src/GitVersion.Core/VersionConverters/WixUpdater/WixVersionFileUpdater.cs +++ b/src/GitVersion.Output/WixUpdater/WixVersionFileUpdater.cs @@ -3,25 +3,17 @@ using GitVersion.Logging; using GitVersion.OutputVariables; -namespace GitVersion.VersionConverters.WixUpdater; +namespace GitVersion.Output.WixUpdater; -public interface IWixVersionFileUpdater : IVersionConverter +internal interface IWixVersionFileUpdater : IVersionConverter; +internal sealed class WixVersionFileUpdater(ILog log, IFileSystem fileSystem) : IWixVersionFileUpdater { -} -public sealed class WixVersionFileUpdater : IWixVersionFileUpdater -{ - private readonly IFileSystem fileSystem; - private readonly ILog log; + private readonly IFileSystem fileSystem = fileSystem.NotNull(); + private readonly ILog log = log.NotNull(); private string? wixVersionFile; public const string WixVersionFileName = "GitVersion_WixVersion.wxi"; - public WixVersionFileUpdater(IFileSystem fileSystem, ILog log) - { - this.fileSystem = fileSystem.NotNull(); - this.log = log.NotNull(); - } - - public void Execute(VersionVariables variables, WixVersionContext context) + public void Execute(GitVersionVariables variables, WixVersionContext context) { this.wixVersionFile = PathHelper.Combine(context.WorkingDirectory, WixVersionFileName); this.log.Info("Updating GitVersion_WixVersion.wxi"); @@ -38,19 +30,19 @@ public void Execute(VersionVariables variables, WixVersionContext context) doc.Save(fs); } - private static string GetWixFormatFromVersionVariables(VersionVariables variables) + private static string GetWixFormatFromVersionVariables(GitVersionVariables variables) { var builder = new StringBuilder(); builder.Append("\n"); - var availableVariables = VersionVariables.AvailableVariables; - foreach (var variable in availableVariables) + foreach (var (key, value) in variables.OrderBy(x => x.Key)) { - variables.TryGetValue(variable, out var value); - builder.Append($"\t\n"); + builder.Append("\t\n"); } builder.Append("\n"); return builder.ToString(); } - public void Dispose() => this.log.Info($"Done writing {this.wixVersionFile}"); + public void Dispose() + { + } } diff --git a/src/GitVersion.Schema/DefaultAttributeHandler.cs b/src/GitVersion.Schema/DefaultAttributeHandler.cs new file mode 100644 index 0000000000..3d80690d21 --- /dev/null +++ b/src/GitVersion.Schema/DefaultAttributeHandler.cs @@ -0,0 +1,16 @@ +using GitVersion.Configuration.Attributes; +using Json.Schema.Generation; +using Json.Schema.Generation.Intents; + +namespace GitVersion.Schema; + +internal class DefaultAttributeHandler : IAttributeHandler +{ + void IAttributeHandler.AddConstraints(SchemaGenerationContextBase context, Attribute attribute) + { + if (attribute is JsonPropertyDefaultAttribute defaultAttribute) + { + context.Intents.Insert(0, new DefaultIntent(defaultAttribute.Value)); + } + } +} diff --git a/src/GitVersion.Schema/DescriptionAttributeHandler.cs b/src/GitVersion.Schema/DescriptionAttributeHandler.cs new file mode 100644 index 0000000000..2ebfd69302 --- /dev/null +++ b/src/GitVersion.Schema/DescriptionAttributeHandler.cs @@ -0,0 +1,29 @@ +using Json.Schema.Generation; +using Json.Schema.Generation.Intents; + +using ConfigurationDescriptionAttribute = GitVersion.Configuration.Attributes.JsonPropertyDescriptionAttribute; +using OutputDescriptionAttribute = GitVersion.Output.Attributes.JsonPropertyDescriptionAttribute; + +namespace GitVersion.Schema; + +internal class DescriptionAttributeHandler1 : IAttributeHandler +{ + void IAttributeHandler.AddConstraints(SchemaGenerationContextBase context, Attribute attribute) + { + if (attribute is ConfigurationDescriptionAttribute descriptionAttribute) + { + context.Intents.Insert(0, new DescriptionIntent(descriptionAttribute.Description)); + } + } +} + +internal class DescriptionAttributeHandler2 : IAttributeHandler +{ + void IAttributeHandler.AddConstraints(SchemaGenerationContextBase context, Attribute attribute) + { + if (attribute is OutputDescriptionAttribute descriptionAttribute) + { + context.Intents.Insert(0, new DescriptionIntent(descriptionAttribute.Description)); + } + } +} diff --git a/src/GitVersion.Schema/Extensions.cs b/src/GitVersion.Schema/Extensions.cs new file mode 100644 index 0000000000..dac09a46c1 --- /dev/null +++ b/src/GitVersion.Schema/Extensions.cs @@ -0,0 +1,19 @@ +using System.Text.Encodings.Web; +using Json.More; +using Json.Schema; + +namespace GitVersion.Schema; + +internal static class Extensions +{ + public static void WriteToFile(this JsonSchema jsonSchema, string outputFileName) + { + var jsonDocument = jsonSchema.ToJsonDocument(); + + using var fs = File.Create(outputFileName); + using var writer = new Utf8JsonWriter(fs, new() { Indented = true, Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); + jsonDocument.WriteTo(writer); + writer.Flush(); + fs.Flush(); + } +} diff --git a/src/GitVersion.Schema/FormatAttributeHandler.cs b/src/GitVersion.Schema/FormatAttributeHandler.cs new file mode 100644 index 0000000000..1c3bd5a8d1 --- /dev/null +++ b/src/GitVersion.Schema/FormatAttributeHandler.cs @@ -0,0 +1,42 @@ +using Json.Schema; +using Json.Schema.Generation; +using Json.Schema.Generation.Intents; +using Format = GitVersion.Configuration.Attributes.Format; +using FormatAttribute = GitVersion.Configuration.Attributes.JsonPropertyFormatAttribute; + +namespace GitVersion.Schema; +internal class FormatAttributeHandler : IAttributeHandler +{ + void IAttributeHandler.AddConstraints(SchemaGenerationContextBase context, Attribute attribute) + { + if (attribute is FormatAttribute formatAttribute) + { + Json.Schema.Format? format = formatAttribute.Format switch + { + Format.Date => Formats.Date, + Format.DateTime => Formats.DateTime, + Format.Duration => Formats.Duration, + Format.Email => Formats.Email, + Format.Hostname => Formats.Hostname, + Format.IdnEmail => Formats.IdnEmail, + Format.IdnHostname => Formats.IdnHostname, + Format.Ipv4 => Formats.Ipv4, + Format.Ipv6 => Formats.Ipv6, + Format.Iri => Formats.Iri, + Format.IriReference => Formats.IriReference, + Format.JsonPointer => Formats.JsonPointer, + Format.Regex => Formats.Regex, + Format.RelativeJsonPointer => Formats.RelativeJsonPointer, + Format.Time => Formats.Time, + Format.Uri => Formats.Uri, + Format.UriReference => Formats.UriReference, + Format.UriTemplate => Formats.UriTemplate, + Format.Uuid => Formats.Uuid, + _ => null // in case new formats are added. + }; + + if (format != null) + context.Intents.Insert(0, new FormatIntent(format)); + } + } +} diff --git a/src/GitVersion.Schema/GitVersion.Schema.csproj b/src/GitVersion.Schema/GitVersion.Schema.csproj new file mode 100644 index 0000000000..db01045451 --- /dev/null +++ b/src/GitVersion.Schema/GitVersion.Schema.csproj @@ -0,0 +1,15 @@ + + + Exe + schema + + + + + + + + + + + diff --git a/src/GitVersion.Schema/Program.cs b/src/GitVersion.Schema/Program.cs new file mode 100644 index 0000000000..3bed198c98 --- /dev/null +++ b/src/GitVersion.Schema/Program.cs @@ -0,0 +1,46 @@ +using GitVersion.Configuration; +using GitVersion.OutputVariables; +using GitVersion.Schema; +using Json.Schema; +using Json.Schema.Generation; +using Microsoft.Extensions.Configuration; + +var configurationManager = new ConfigurationManager().AddCommandLine(args).Build(); +var schemasDirectory = configurationManager["OutputDirectory"]!; +var schemaVersion = configurationManager["Version"]!; + +var configuration = new SchemaGeneratorConfiguration +{ + PropertyNameResolver = PropertyNameResolvers.KebabCase, + Nullability = Nullability.AllowForNullableValueTypes, + PropertyOrder = PropertyOrder.ByName, +}; + +AttributeHandler.AddHandler(); +AttributeHandler.AddHandler(); +AttributeHandler.AddHandler(); +AttributeHandler.AddHandler(); + +var builder = new JsonSchemaBuilder(); +builder.Schema("http://json-schema.org/draft-07/schema#"); +builder.Id($"https://gitversion.net/schemas/{schemaVersion}/GitVersion.configuration.json"); +builder.Title($"GitVersion Configuration ({schemaVersion})"); +builder.Description($"GitVersion configuration schema ({schemaVersion})"); +var schema = builder.FromType(configuration).Build(); + +var fileName = Path.Combine(schemasDirectory, schemaVersion, "GitVersion.configuration.json"); +Console.WriteLine($"Writing schema to {fileName}"); +schema.WriteToFile(fileName); + +configuration.PropertyNameResolver = PropertyNameResolvers.AsDeclared; + +builder = new(); +builder.Schema("http://json-schema.org/draft-07/schema#"); +builder.Id($"https://gitversion.net/schemas/{schemaVersion}/GitVersion.json"); +builder.Title("GitVersion version variables output"); +builder.Description("GitVersion output schema"); +schema = builder.FromType(configuration).Build(); + +fileName = Path.Combine(schemasDirectory, schemaVersion, "GitVersion.json"); +Console.WriteLine($"Writing schema to {fileName}"); +schema.WriteToFile(fileName); diff --git a/src/GitVersion.Testing/Fixtures/BaseGitFlowRepositoryFixture.cs b/src/GitVersion.Testing/Fixtures/BaseGitFlowRepositoryFixture.cs new file mode 100644 index 0000000000..1d97d7a79b --- /dev/null +++ b/src/GitVersion.Testing/Fixtures/BaseGitFlowRepositoryFixture.cs @@ -0,0 +1,38 @@ +using GitVersion.Helpers; +using LibGit2Sharp; + +namespace GitVersion.Testing; + +/// +/// Creates a repo with a develop branch off main which is a single commit ahead of main +/// +public class BaseGitFlowRepositoryFixture : EmptyRepositoryFixture +{ + /// + /// Creates a repo with a develop branch off main which is a single commit ahead of main branch + /// Main will be tagged with the initial version before branching develop + /// + public BaseGitFlowRepositoryFixture(string initialVersion, string branchName = "main") : + this(r => r.MakeATaggedCommit(initialVersion), branchName) + { + } + + /// + /// Creates a repo with a develop branch off main which is a single commit ahead of main + /// The initial setup actions will be performed before branching develop + /// + public BaseGitFlowRepositoryFixture(Action initialMainAction, string branchName = "main") : + base(branchName) => SetupRepo(initialMainAction); + + private void SetupRepo(Action initialMainAction) + { + var randomFile = PathHelper.Combine(Repository.Info.WorkingDirectory, Guid.NewGuid().ToString()); + File.WriteAllText(randomFile, string.Empty); + Commands.Stage(Repository, randomFile); + + initialMainAction(Repository); + + Commands.Checkout(Repository, Repository.CreateBranch("develop")); + Repository.MakeACommit(); + } +} diff --git a/src/GitVersion.Testing/Fixtures/EmptyRepositoryFixture.cs b/src/GitVersion.Testing/Fixtures/EmptyRepositoryFixture.cs new file mode 100644 index 0000000000..b864b31247 --- /dev/null +++ b/src/GitVersion.Testing/Fixtures/EmptyRepositoryFixture.cs @@ -0,0 +1,3 @@ +namespace GitVersion.Testing; + +public class EmptyRepositoryFixture(string branchName = "main") : RepositoryFixtureBase(path => CreateNewRepository(path, branchName)); diff --git a/src/GitVersion.Testing/Fixtures/LocalRepositoryFixture.cs b/src/GitVersion.Testing/Fixtures/LocalRepositoryFixture.cs new file mode 100644 index 0000000000..8431d4435e --- /dev/null +++ b/src/GitVersion.Testing/Fixtures/LocalRepositoryFixture.cs @@ -0,0 +1,5 @@ +using LibGit2Sharp; + +namespace GitVersion.Testing; + +public class LocalRepositoryFixture(Repository repository) : RepositoryFixtureBase(repository); diff --git a/src/GitTools.Testing/Fixtures/RemoteRepositoryFixture.cs b/src/GitVersion.Testing/Fixtures/RemoteRepositoryFixture.cs similarity index 50% rename from src/GitTools.Testing/Fixtures/RemoteRepositoryFixture.cs rename to src/GitVersion.Testing/Fixtures/RemoteRepositoryFixture.cs index e17c13714c..2312d47f62 100644 --- a/src/GitTools.Testing/Fixtures/RemoteRepositoryFixture.cs +++ b/src/GitVersion.Testing/Fixtures/RemoteRepositoryFixture.cs @@ -1,6 +1,6 @@ using LibGit2Sharp; -namespace GitTools.Testing; +namespace GitVersion.Testing; /// /// Creates a remote repository then clones it @@ -9,34 +9,18 @@ namespace GitTools.Testing; /// public class RemoteRepositoryFixture : RepositoryFixtureBase { - public RemoteRepositoryFixture(Func builder) - : base(builder) => CreateLocalRepository(); + public RemoteRepositoryFixture(Func builder) + : base(builder) => LocalRepositoryFixture = CloneRepository(); - public RemoteRepositoryFixture() : this("main") - { - } - - public RemoteRepositoryFixture(string branchName) : - this(path => CreateNewRepository(path, branchName)) + public RemoteRepositoryFixture(string branchName = "main") + : this(path => CreateNewRepository(path, branchName, 5)) { } /// /// Fixture pointing at the local repository /// - public LocalRepositoryFixture LocalRepositoryFixture { get; private set; } - - private static IRepository CreateNewRepository(string path, string branchName) - { - Init(path, branchName); - Console.WriteLine("Created git repository at '{0}'", path); - - var repo = new Repository(path); - repo.MakeCommits(5); - return repo; - } - - private void CreateLocalRepository() => LocalRepositoryFixture = CloneRepository(); + public LocalRepositoryFixture LocalRepositoryFixture { get; } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. @@ -47,7 +31,6 @@ protected override void Dispose(bool disposing) { LocalRepositoryFixture.Dispose(); } - base.Dispose(disposing); } } diff --git a/src/GitVersion.Testing/Fixtures/RepositoryFixtureBase.cs b/src/GitVersion.Testing/Fixtures/RepositoryFixtureBase.cs new file mode 100644 index 0000000000..c15937ee55 --- /dev/null +++ b/src/GitVersion.Testing/Fixtures/RepositoryFixtureBase.cs @@ -0,0 +1,174 @@ +using GitVersion.Helpers; +using GitVersion.Testing.Internal; +using LibGit2Sharp; + +namespace GitVersion.Testing; + +/// +/// Fixture abstracting a git repository +/// +public abstract class RepositoryFixtureBase : IDisposable +{ + protected RepositoryFixtureBase(Func repositoryBuilder) + : this(repositoryBuilder(PathHelper.GetRepositoryTempPath())) + { + } + + protected RepositoryFixtureBase(Repository repository) + { + SequenceDiagram = new(); + Repository = repository ?? throw new ArgumentNullException(nameof(repository)); + Repository.Config.Set("user.name", "Test"); + Repository.Config.Set("user.email", "test@email.com"); + } + + public Repository Repository { get; } + + public string RepositoryPath => Repository.Info.WorkingDirectory.TrimEnd('\\'); + + public SequenceDiagram SequenceDiagram { get; } + + /// + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (!disposing) + { + return; + } + + Repository.Dispose(); + var directoryPath = Path.GetFileName(RepositoryPath); + + try + { + Console.WriteLine("Cleaning up repository path at {0}", directoryPath); + DirectoryHelper.DeleteDirectory(RepositoryPath); + Console.WriteLine("Cleaned up repository path at {0}", directoryPath); + } + catch (Exception e) + { + Console.WriteLine("Failed to clean up repository path at {0}. Received exception: {1}", directoryPath, e.Message); + // throw; + } + + this.SequenceDiagram.End(); + Console.WriteLine("**Visualisation of test:**"); + Console.WriteLine(string.Empty); + Console.WriteLine(this.SequenceDiagram.GetDiagram()); + } + + public void Checkout(string branch) => Commands.Checkout(Repository, branch); + + public void Remove(string branch) + { + Repository.Branches.Remove(branch); + SequenceDiagram.Destroy(branch); + } + + public static void Init(string path, string branchName = "main") => GitTestExtensions.ExecuteGitCmd($"init {path} -b {branchName}"); + + public string MakeATaggedCommit(string tag) + { + var sha = MakeACommit(); + ApplyTag(tag); + return sha; + } + + public void ApplyTag(string tag) + { + this.SequenceDiagram.ApplyTag(tag, Repository.Head.FriendlyName); + Repository.ApplyTag(tag); + } + + public void CreateBranch(string branchName, string? @as = null) + { + this.SequenceDiagram.BranchTo(branchName, Repository.Head.FriendlyName, @as); + Repository.CreateBranch(branchName); + } + + public void BranchTo(string branchName, string? @as = null) + { + this.SequenceDiagram.BranchTo(branchName, Repository.Head.FriendlyName, @as); + var branch = Repository.CreateBranch(branchName); + Commands.Checkout(Repository, branch); + } + + public void BranchToFromTag(string branchName, string fromTag, string onBranch, string? @as = null) + { + this.SequenceDiagram.BranchToFromTag(branchName, fromTag, onBranch, @as); + var branch = Repository.CreateBranch(branchName); + Commands.Checkout(Repository, branch); + } + + public string MakeACommit() + { + var to = Repository.Head.FriendlyName; + this.SequenceDiagram.MakeACommit(to); + var commit = Repository.MakeACommit(); + return commit.Sha; + } + + /// + /// Merges (no-ff) specified branch into the current HEAD of this repository + /// + public void MergeNoFF(string mergeSource) + { + this.SequenceDiagram.Merge(mergeSource, Repository.Head.FriendlyName); + Repository.MergeNoFF(mergeSource, Generate.SignatureNow()); + } + + public void MergeTo(string branchName, bool removeBranchAfterMerging = false) + { + string mergeSource = Repository.Head.FriendlyName; + Checkout(branchName); + MergeNoFF(mergeSource); + if (removeBranchAfterMerging) + { + Remove(mergeSource); + } + } + + /// + /// Clones the repository managed by this fixture into another LocalRepositoryFixture + /// + public LocalRepositoryFixture CloneRepository() + { + var localPath = PathHelper.GetRepositoryTempPath(); + Repository.Clone(RepositoryPath, localPath); + Console.WriteLine($"Cloned repository to '{localPath}' from '{RepositoryPath}'"); + return new LocalRepositoryFixture(new Repository(localPath)); + } + + protected static Repository CreateNewRepository(string path, string branchName, int commits = 0) + { + Init(path, branchName); + Console.WriteLine("Created git repository at '{0}'", path); + + var repository = new Repository(path); + if (commits > 0) + { + repository.MakeCommits(commits); + } + return repository; + } + + /// + /// Pulls with a depth of 1 and prunes all older commits, making the repository shallow. + /// + public void MakeShallow() + { + GitTestExtensions.ExecuteGitCmd($"-C {RepositoryPath} pull --depth 1"); + GitTestExtensions.ExecuteGitCmd($"-C {RepositoryPath} gc --prune=all"); + } + + public void Fetch(string remote, FetchOptions? options = null) + => Commands.Fetch(Repository, remote, [], options, null); +} diff --git a/src/GitTools.Testing/Fixtures/SequenceDiagram.cs b/src/GitVersion.Testing/Fixtures/SequenceDiagram.cs similarity index 91% rename from src/GitTools.Testing/Fixtures/SequenceDiagram.cs rename to src/GitVersion.Testing/Fixtures/SequenceDiagram.cs index e28d6cafd7..322e7a9355 100644 --- a/src/GitTools.Testing/Fixtures/SequenceDiagram.cs +++ b/src/GitVersion.Testing/Fixtures/SequenceDiagram.cs @@ -1,13 +1,13 @@ -using GitTools.Testing.Internal; +using GitVersion.Testing.Internal; -namespace GitTools.Testing; +namespace GitVersion.Testing; /// /// Creates an abstraction over a PlantUML Sequence diagram to draw a sequence diagram of a git repository being created /// public class SequenceDiagram { - private readonly Dictionary participants = new(); + private readonly Dictionary participants = []; private readonly StringBuilder diagramBuilder; /// @@ -24,6 +24,11 @@ public SequenceDiagram() /// public void Activate(string branch) => this.diagramBuilder.AppendLineFormat("activate {0}", GetParticipant(branch)); + /// + /// Deactivates a branch/participant in the sequence diagram + /// + public void Deactivate(string branch) => this.diagramBuilder.AppendLineFormat("deactivate {0}", GetParticipant(branch)); + /// /// Destroys a branch/participant in the sequence diagram /// @@ -105,7 +110,7 @@ public void BranchToFromTag(string branchName, string fromTag, string onBranch, /// public void Merge(string from, string to) => this.diagramBuilder.AppendLineFormat("{0} -> {1}: merge", GetParticipant(from), GetParticipant(to)); - private string GetParticipant(string branch) => this.participants.ContainsKey(branch) ? this.participants[branch] : branch; + private string GetParticipant(string branch) => this.participants.GetValueOrDefault(branch, branch); /// /// Ends the sequence diagram diff --git a/src/GitTools.Testing/Generate.cs b/src/GitVersion.Testing/Generate.cs similarity index 95% rename from src/GitTools.Testing/Generate.cs rename to src/GitVersion.Testing/Generate.cs index 5bb7aedeca..4dbc87b271 100644 --- a/src/GitTools.Testing/Generate.cs +++ b/src/GitVersion.Testing/Generate.cs @@ -1,6 +1,6 @@ using LibGit2Sharp; -namespace GitTools.Testing; +namespace GitVersion.Testing; /// /// Static helper class for generating data git needs, like signatures diff --git a/src/GitTools.Testing/GitTestExtensions.cs b/src/GitVersion.Testing/GitTestExtensions.cs similarity index 89% rename from src/GitTools.Testing/GitTestExtensions.cs rename to src/GitVersion.Testing/GitTestExtensions.cs index b659bfa4b4..ed920fabb0 100644 --- a/src/GitTools.Testing/GitTestExtensions.cs +++ b/src/GitVersion.Testing/GitTestExtensions.cs @@ -1,7 +1,8 @@ -using GitTools.Testing.Internal; +using GitVersion.Helpers; +using GitVersion.Testing.Internal; using LibGit2Sharp; -namespace GitTools.Testing; +namespace GitVersion.Testing; public static class GitTestExtensions { @@ -22,7 +23,7 @@ public static Commit[] MakeCommits(this IRepository repository, int numCommitsTo private static Commit CreateFileAndCommit(this IRepository repository, string relativeFileName, string? commitMessage = null) { - var randomFile = Path.Combine(repository.Info.WorkingDirectory, relativeFileName); + var randomFile = PathHelper.Combine(repository.Info.WorkingDirectory, relativeFileName); if (File.Exists(randomFile)) { File.Delete(randomFile); @@ -42,7 +43,7 @@ public static Tag MakeATaggedCommit(this IRepository repository, string tag) { var commit = repository.MakeACommit(); var existingTag = repository.Tags.SingleOrDefault(t => t.FriendlyName == tag); - return existingTag != null ? existingTag : repository.Tags.Add(tag, commit); + return existingTag ?? repository.Tags.Add(tag, commit); } public static Commit CreatePullRequestRef(this IRepository repository, string from, string to, int prNumber = 2, bool normalise = false, bool allowFastForwardMerge = false) @@ -81,13 +82,8 @@ public static void ExecuteGitCmd(string gitCmd, Action? writer = null) gitCmd, "."); } - catch (FileNotFoundException exception) + catch (FileNotFoundException exception) when (exception.FileName == "git") { - if (exception.FileName != "git") - { - throw; - } - output.AppendLine("Could not execute 'git log' due to the following error:"); output.AppendLine(exception.ToString()); } diff --git a/src/GitVersion.Testing/GitVersion.Testing.csproj b/src/GitVersion.Testing/GitVersion.Testing.csproj new file mode 100644 index 0000000000..98f9a03956 --- /dev/null +++ b/src/GitVersion.Testing/GitVersion.Testing.csproj @@ -0,0 +1,12 @@ + + + false + + + + + + + + + diff --git a/src/GitTools.Testing/Internal/DirectoryHelper.cs b/src/GitVersion.Testing/Helpers/DirectoryHelper.cs similarity index 89% rename from src/GitTools.Testing/Internal/DirectoryHelper.cs rename to src/GitVersion.Testing/Helpers/DirectoryHelper.cs index f11334b6c7..d8137e267d 100644 --- a/src/GitTools.Testing/Internal/DirectoryHelper.cs +++ b/src/GitVersion.Testing/Helpers/DirectoryHelper.cs @@ -1,4 +1,6 @@ -namespace GitTools.Testing.Internal; +using GitVersion.Helpers; + +namespace GitVersion.Testing.Internal; internal static class DirectoryHelper { @@ -19,11 +21,11 @@ public static void CopyFilesRecursively(DirectoryInfo source, DirectoryInfo targ foreach (var file in source.GetFiles()) { - file.CopyTo(Path.Combine(target.FullName, Rename(file.Name))); + file.CopyTo(PathHelper.Combine(target.FullName, Rename(file.Name))); } } - private static string Rename(string name) => ToRename.ContainsKey(name) ? ToRename[name] : name; + private static string Rename(string name) => ToRename.GetValueOrDefault(name, name); public static void DeleteSubDirectories(string parentPath) { @@ -71,7 +73,7 @@ public static void DeleteDirectory(string directoryPath) "{0}Known and common causes include:" + "{0}- Windows Search Indexer (go to the Indexing Options, in the Windows Control Panel, and exclude the bin folder of LibGit2Sharp.Tests)" + "{0}- Antivirus (exclude the bin folder of LibGit2Sharp.Tests from the paths scanned by your real-time antivirus){0}", - Environment.NewLine, Path.GetFullPath(directoryPath))); + SysEnv.NewLine, Path.GetFullPath(directoryPath))); } } } diff --git a/src/GitTools.Testing/Internal/ObjectExtensions.cs b/src/GitVersion.Testing/Helpers/ObjectExtensions.cs similarity index 86% rename from src/GitTools.Testing/Internal/ObjectExtensions.cs rename to src/GitVersion.Testing/Helpers/ObjectExtensions.cs index 7ec170b27b..060b3e6bec 100644 --- a/src/GitTools.Testing/Internal/ObjectExtensions.cs +++ b/src/GitVersion.Testing/Helpers/ObjectExtensions.cs @@ -1,4 +1,4 @@ -namespace GitTools.Testing.Internal; +namespace GitVersion.Testing.Internal; public static class ObjectExtensions { diff --git a/src/GitVersion.Testing/Helpers/StringBuilderExtensions.cs b/src/GitVersion.Testing/Helpers/StringBuilderExtensions.cs new file mode 100644 index 0000000000..a17c0d4e1a --- /dev/null +++ b/src/GitVersion.Testing/Helpers/StringBuilderExtensions.cs @@ -0,0 +1,19 @@ +#if NET7_0_OR_GREATER +using System.Diagnostics.CodeAnalysis; +#endif + +namespace GitVersion.Testing.Internal; + +internal static class StringBuilderExtensions +{ + public static void AppendLineFormat(this StringBuilder stringBuilder, +#if NET7_0_OR_GREATER + [StringSyntax(StringSyntaxAttribute.CompositeFormat)] +#endif + string format, + params object?[] args) + { + stringBuilder.AppendFormat(format, args); + stringBuilder.AppendLine(); + } +} diff --git a/src/GitTools.Testing/VirtualTime.cs b/src/GitVersion.Testing/VirtualTime.cs similarity index 95% rename from src/GitTools.Testing/VirtualTime.cs rename to src/GitVersion.Testing/VirtualTime.cs index baac3b8822..0b23cd6ce4 100644 --- a/src/GitTools.Testing/VirtualTime.cs +++ b/src/GitVersion.Testing/VirtualTime.cs @@ -1,4 +1,4 @@ -namespace GitTools.Testing; +namespace GitVersion.Testing; /// /// VirtualTime starts at an hour before now, then each time it is called increments by a minute diff --git a/src/GitVersion.sln b/src/GitVersion.sln index 2774e6681c..cf4704cb70 100644 --- a/src/GitVersion.sln +++ b/src/GitVersion.sln @@ -1,24 +1,12 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28714.193 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33502.453 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.App", "GitVersion.App\GitVersion.App.csproj", "{C3578A7B-09A6-4444-9383-0DEAFA4958BD}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Core.Tests", "GitVersion.Core.Tests\GitVersion.Core.Tests.csproj", "{BF905F84-382C-440D-92F5-C61108626D8D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Configuration", "GitVersion.Configuration\GitVersion.Configuration.csproj", "{B93C3F0C-6CBF-49E6-A476-A0103319640B}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3EFFC5D6-88D0-49D9-BB53-E1B7EB49DD45}" - ProjectSection(SolutionItems) = preProject - ..\.editorconfig = ..\.editorconfig - ..\.gitattributes = ..\.gitattributes - ..\.gitignore = ..\.gitignore - ..\azure-pipelines.yml = ..\azure-pipelines.yml - ..\build.ps1 = ..\build.ps1 - ..\CONTRIBUTING.md = ..\CONTRIBUTING.md - Directory.Build.props = Directory.Build.props - ..\GitVersion.yml = ..\GitVersion.yml - ..\LICENSE = ..\LICENSE - ..\README.md = ..\README.md - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Core.Tests", "GitVersion.Core.Tests\GitVersion.Core.Tests.csproj", "{BF905F84-382C-440D-92F5-C61108626D8D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Core", "GitVersion.Core\GitVersion.Core.csproj", "{F9741A0D-B9D7-4557-9A1C-A7252C1071F5}" EndProject @@ -28,10 +16,48 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.MsBuild", "GitVe EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.MsBuild.Tests", "GitVersion.MsBuild.Tests\GitVersion.MsBuild.Tests.csproj", "{B35EF742-95D4-4E6A-B782-BE1C3E5CF9AE}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitTools.Testing", "GitTools.Testing\GitTools.Testing.csproj", "{6138640B-5C05-4070-BE32-6B17BEFDF63C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Testing", "GitVersion.Testing\GitVersion.Testing.csproj", "{6138640B-5C05-4070-BE32-6B17BEFDF63C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.LibGit2Sharp", "GitVersion.LibGit2Sharp\GitVersion.LibGit2Sharp.csproj", "{093AFCF2-68F4-49B1-8173-7CB88467E783}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.BuildAgents", "GitVersion.BuildAgents\GitVersion.BuildAgents.csproj", "{B1C486D2-2B07-42D6-86AE-3F9AD50F27C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.BuildAgents.Tests", "GitVersion.BuildAgents.Tests\GitVersion.BuildAgents.Tests.csproj", "{85060C01-6DAF-48E9-9D7E-AEDA8FFEB0DD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Output", "GitVersion.Output\GitVersion.Output.csproj", "{843450BC-3A6D-4DA6-8520-2D9A9C8218AC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Output.Tests", "GitVersion.Output.Tests\GitVersion.Output.Tests.csproj", "{13C60949-7225-4B08-BE63-CAAC5E25FD16}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Modules", "Modules", "{69C36B9D-E496-42A2-B091-C055E999686C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Schema", "GitVersion.Schema\GitVersion.Schema.csproj", "{22026A20-261C-4EF5-836C-EA6F6D37B5E3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sln", "sln", "{542E443E-14C3-45A7-A2E9-ACF27286A3B2}" + ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + Directory.Packages.props = Directory.Packages.props + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "readme", "readme", "{1F4BE015-699F-464A-8FF0-D8762102421A}" + ProjectSection(SolutionItems) = preProject + ..\BREAKING_CHANGES.md = ..\BREAKING_CHANGES.md + ..\CONTRIBUTING.md = ..\CONTRIBUTING.md + ..\LICENSE = ..\LICENSE + ..\README.md = ..\README.md + ..\SECURITY.md = ..\SECURITY.md + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitVersion.Configuration.Tests", "GitVersion.Configuration.Tests\GitVersion.Configuration.Tests.csproj", "{E3722E82-D283-4BA7-B44F-C43072B829FA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "root", "root", "{7D3A83B4-95D9-42AF-AB11-6292209CF00B}" + ProjectSection(SolutionItems) = preProject + ..\.editorconfig = ..\.editorconfig + ..\.gitattributes = ..\.gitattributes + ..\.gitignore = ..\.gitignore + ..\GitVersion.yml = ..\GitVersion.yml + ..\global.json = ..\global.json + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -42,6 +68,10 @@ Global {C3578A7B-09A6-4444-9383-0DEAFA4958BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3578A7B-09A6-4444-9383-0DEAFA4958BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3578A7B-09A6-4444-9383-0DEAFA4958BD}.Release|Any CPU.Build.0 = Release|Any CPU + {B93C3F0C-6CBF-49E6-A476-A0103319640B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B93C3F0C-6CBF-49E6-A476-A0103319640B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B93C3F0C-6CBF-49E6-A476-A0103319640B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B93C3F0C-6CBF-49E6-A476-A0103319640B}.Release|Any CPU.Build.0 = Release|Any CPU {BF905F84-382C-440D-92F5-C61108626D8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BF905F84-382C-440D-92F5-C61108626D8D}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF905F84-382C-440D-92F5-C61108626D8D}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -70,10 +100,44 @@ Global {093AFCF2-68F4-49B1-8173-7CB88467E783}.Debug|Any CPU.Build.0 = Debug|Any CPU {093AFCF2-68F4-49B1-8173-7CB88467E783}.Release|Any CPU.ActiveCfg = Release|Any CPU {093AFCF2-68F4-49B1-8173-7CB88467E783}.Release|Any CPU.Build.0 = Release|Any CPU + {B1C486D2-2B07-42D6-86AE-3F9AD50F27C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1C486D2-2B07-42D6-86AE-3F9AD50F27C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1C486D2-2B07-42D6-86AE-3F9AD50F27C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1C486D2-2B07-42D6-86AE-3F9AD50F27C8}.Release|Any CPU.Build.0 = Release|Any CPU + {85060C01-6DAF-48E9-9D7E-AEDA8FFEB0DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85060C01-6DAF-48E9-9D7E-AEDA8FFEB0DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85060C01-6DAF-48E9-9D7E-AEDA8FFEB0DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85060C01-6DAF-48E9-9D7E-AEDA8FFEB0DD}.Release|Any CPU.Build.0 = Release|Any CPU + {843450BC-3A6D-4DA6-8520-2D9A9C8218AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {843450BC-3A6D-4DA6-8520-2D9A9C8218AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {843450BC-3A6D-4DA6-8520-2D9A9C8218AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {843450BC-3A6D-4DA6-8520-2D9A9C8218AC}.Release|Any CPU.Build.0 = Release|Any CPU + {13C60949-7225-4B08-BE63-CAAC5E25FD16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13C60949-7225-4B08-BE63-CAAC5E25FD16}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13C60949-7225-4B08-BE63-CAAC5E25FD16}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13C60949-7225-4B08-BE63-CAAC5E25FD16}.Release|Any CPU.Build.0 = Release|Any CPU + {22026A20-261C-4EF5-836C-EA6F6D37B5E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {22026A20-261C-4EF5-836C-EA6F6D37B5E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {22026A20-261C-4EF5-836C-EA6F6D37B5E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {22026A20-261C-4EF5-836C-EA6F6D37B5E3}.Release|Any CPU.Build.0 = Release|Any CPU + {E3722E82-D283-4BA7-B44F-C43072B829FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E3722E82-D283-4BA7-B44F-C43072B829FA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E3722E82-D283-4BA7-B44F-C43072B829FA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E3722E82-D283-4BA7-B44F-C43072B829FA}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {B93C3F0C-6CBF-49E6-A476-A0103319640B} = {69C36B9D-E496-42A2-B091-C055E999686C} + {093AFCF2-68F4-49B1-8173-7CB88467E783} = {69C36B9D-E496-42A2-B091-C055E999686C} + {B1C486D2-2B07-42D6-86AE-3F9AD50F27C8} = {69C36B9D-E496-42A2-B091-C055E999686C} + {85060C01-6DAF-48E9-9D7E-AEDA8FFEB0DD} = {69C36B9D-E496-42A2-B091-C055E999686C} + {843450BC-3A6D-4DA6-8520-2D9A9C8218AC} = {69C36B9D-E496-42A2-B091-C055E999686C} + {13C60949-7225-4B08-BE63-CAAC5E25FD16} = {69C36B9D-E496-42A2-B091-C055E999686C} + {1F4BE015-699F-464A-8FF0-D8762102421A} = {7D3A83B4-95D9-42AF-AB11-6292209CF00B} + {E3722E82-D283-4BA7-B44F-C43072B829FA} = {69C36B9D-E496-42A2-B091-C055E999686C} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {0C1C310E-7A4D-4032-878B-6DC375894C49} EndGlobalSection diff --git a/src/GitVersion.sln.DotSettings b/src/GitVersion.sln.DotSettings index 6cb996e947..a57b7e3685 100644 --- a/src/GitVersion.sln.DotSettings +++ b/src/GitVersion.sln.DotSettings @@ -644,6 +644,21 @@ II.2.12 <HandlesEvent /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Type parameters"><ElementKinds><Kind Name="TYPE_PARAMETER" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Instance fields (not private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Local variables"><ElementKinds><Kind Name="LOCAL_VARIABLE" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Constant fields (not private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Static fields (not private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Parameters"><ElementKinds><Kind Name="PARAMETER" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Enum members"><ElementKinds><Kind Name="ENUM_MEMBER" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Types and namespaces"><ElementKinds><Kind Name="NAMESPACE" /><Kind Name="CLASS" /><Kind Name="STRUCT" /><Kind Name="ENUM" /><Kind Name="DELEGATE" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Local constants"><ElementKinds><Kind Name="LOCAL_CONSTANT" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Any" Description="Interfaces"><ElementKinds><Kind Name="INTERFACE" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Protected, ProtectedInternal, Internal, Public, PrivateProtected" Description="Static readonly fields (not private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> @@ -686,6 +701,7 @@ II.2.12 <HandlesEvent /> True True True + True True True True @@ -700,4 +716,6 @@ II.2.12 <HandlesEvent /> <data /> <data><IncludeFilters /><ExcludeFilters /></data> + True + True True diff --git a/src/mark-shipped.ps1 b/src/mark-shipped.ps1 new file mode 100644 index 0000000000..79186da21a --- /dev/null +++ b/src/mark-shipped.ps1 @@ -0,0 +1,45 @@ +[CmdletBinding(PositionalBinding=$false)] +param () + +Set-StrictMode -version 2.0 +$ErrorActionPreference = "Stop" + +function MarkShipped([string]$dir) { + $shippedFilePath = Join-Path $dir "PublicAPI.Shipped.txt" + $shipped = @() + $shipped += Get-Content $shippedFilePath + + $unshippedFilePath = Join-Path $dir "PublicAPI.Unshipped.txt" + $unshipped = Get-Content $unshippedFilePath + $removed = @() + $removedPrefix = "*REMOVED*"; + Write-Host "Processing $dir" + + foreach ($item in $unshipped) { + if ($item.Length -gt 0) { + if ($item.StartsWith($removedPrefix)) { + $item = $item.Substring($removedPrefix.Length) + $removed += $item + } + else { + $shipped += $item + } + } + } + + $shipped | Sort-Object -Unique |Where-Object { -not $removed.Contains($_) } | Out-File $shippedFilePath -Encoding Ascii + "#nullable enable" | Out-File "PublicAPI.empty.txt" -Encoding Ascii + Copy-Item ./PublicAPI.empty.txt $unshippedFilePath +} + +try { + foreach ($file in Get-ChildItem -re -in "PublicApi.Shipped.txt") { + $dir = Split-Path -parent $file + MarkShipped $dir + } +} +catch { + Write-Host $_ + Write-Host $_.Exception + exit 1 +} diff --git a/tests/integration/Directory.Build.props b/tests/integration/Directory.Build.props index f00105a575..20e3939c27 100644 --- a/tests/integration/Directory.Build.props +++ b/tests/integration/Directory.Build.props @@ -10,15 +10,11 @@ https://api.nuget.org/v3/index.json - - - all runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/tests/integration/Directory.Packages.props b/tests/integration/Directory.Packages.props new file mode 100644 index 0000000000..1ef9ac25e7 --- /dev/null +++ b/tests/integration/Directory.Packages.props @@ -0,0 +1,6 @@ + + + + false + + diff --git a/tests/integration/core/app.csproj b/tests/integration/app.csproj similarity index 100% rename from tests/integration/core/app.csproj rename to tests/integration/app.csproj diff --git a/tests/integration/full/app.csproj b/tests/integration/full/app.csproj deleted file mode 100644 index 67a478fbf0..0000000000 --- a/tests/integration/full/app.csproj +++ /dev/null @@ -1,42 +0,0 @@ - - - - - Debug - AnyCPU - {C1765652-F8AE-4FFD-AFC8-72054A5A91B7} - v4.8 - 512 - true - true - - - AnyCPU - true - full - false - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - TRACE - prompt - 4 - - - - - - - - - - - - - - diff --git a/tests/scripts/test-global-tool.sh b/tests/scripts/test-global-tool.sh index 19074f4834..537921c7de 100644 --- a/tests/scripts/test-global-tool.sh +++ b/tests/scripts/test-global-tool.sh @@ -16,11 +16,12 @@ do shift done +git config --global --add safe.directory '*' result=$(dotnet tool install GitVersion.Tool --version $version --tool-path /tools --add-source $nugetPath) # >/dev/null status=$? if test $status -eq 0 then - /tools/dotnet-gitversion $repoPath /showvariable FullSemver + /tools/dotnet-gitversion $repoPath /showvariable FullSemver /nocache else echo $result fi diff --git a/tests/scripts/test-msbuild-task.sh b/tests/scripts/test-msbuild-task.sh index 9999e37afc..b75db70371 100644 --- a/tests/scripts/test-msbuild-task.sh +++ b/tests/scripts/test-msbuild-task.sh @@ -1,5 +1,5 @@ #!/usr/bin/sh -# sh /scripts/test-msbuild-task.sh --version 5.7.1-beta1.56 --nugetPath /nuget --repoPath /repo/tests/integration/core --targetframework net5.0 +# sh /scripts/test-msbuild-task.sh --version 6.0.0 --nugetPath /nuget --repoPath /repo/tests/integration --targetframework net8.0 while test "$#" -gt 0 do case $1 in @@ -19,6 +19,7 @@ do shift done +git config --global --add safe.directory '*' result=$(dotnet build $repoPath --source $nugetPath --source https://api.nuget.org/v3/index.json -p:GitVersionMsBuildVersion=$version -p:TargetFrameworks=$targetframework) # >/dev/null status=$? if test $status -eq 0 @@ -27,3 +28,5 @@ then else echo $result fi +rm -rf $repoPath/build >/dev/null +rm -rf $repoPath/obj >/dev/null diff --git a/tests/scripts/test-native-tool.sh b/tests/scripts/test-native-tool.sh index 262d8efcac..557c28e1df 100644 --- a/tests/scripts/test-native-tool.sh +++ b/tests/scripts/test-native-tool.sh @@ -16,11 +16,12 @@ do shift done +git config --global --add safe.directory '*' result=$(tar -xvpf /native/gitversion-$runtime-$version.tar.gz -C /native) # >/dev/null status=$? if test $status -eq 0 then - /native/gitversion $repoPath /showvariable FullSemver; + /native/gitversion $repoPath /showvariable FullSemver /nocache else echo $result -fi \ No newline at end of file +fi